当前位置: 首页 > 面试题库 >

在状态更改时反应更改类名称

利思源
2023-03-14
问题内容

我有一个这样的状态,我正在设置activeclass标记如下:

constructor(props) {
  super(props);
  this.state = {'active': false, 'class': 'album'};
}

handleClick(id) {
  if(this.state.active){
    this.setState({'active': false,'class': 'album'})
  }else{
    this.setState({'active': true,'class': 'active'})
  }
}

我有一个列表,其中包含状态为类的项目:

<div className={this.state.class} key={data.id} onClick={this.handleClick.bind(this.data.id}>
  <p>{data.name}</p>
</div>

在这里,如何更改特定div的类名?


问题答案:

以下是我相信您正在尝试做的一个功能齐全的示例(带有功能性摘录)。

根据您的问题,您似乎正在state为所有元素修改1属性。这就是为什么当您单击一个时,它们全部都被更改了。

尤其要注意,状态跟踪 哪个
元素处于活动状态的索引。当MyClickable被点击时,它告诉Container它的索引,Container更新state,随后isActive相应的财产MyClickable秒。

class Container extends React.Component {

  state = {

    activeIndex: null

  }



  handleClick = (index) => this.setState({ activeIndex: index })



  render() {

    return <div>

      <MyClickable name="a" index={0} isActive={ this.state.activeIndex===0 } onClick={ this.handleClick } />

      <MyClickable name="b" index={1} isActive={ this.state.activeIndex===1 } onClick={ this.handleClick }/>

      <MyClickable name="c" index={2} isActive={ this.state.activeIndex===2 } onClick={ this.handleClick }/>

    </div>

  }

}



class MyClickable extends React.Component {

  handleClick = () => this.props.onClick(this.props.index)



  render() {

    return <button

      type='button'

      className={

        this.props.isActive ? 'active' : 'album'

      }

      onClick={ this.handleClick }

    >

      <span>{ this.props.name }</span>

    </button>

  }

}



ReactDOM.render(<Container />, document.getElementById('app'))


button {

  display: block;

  margin-bottom: 1em;

}



.album>span:after {

  content: ' (an album)';

}



.active {

  font-weight: bold;

}



.active>span:after {

  content: ' ACTIVE';

}


<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.6.1/react.min.js"></script>

<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.6.1/react-dom.min.js"></script>

<div id="app"></div>

更新:“循环”

在回应有关“循环”版本的评论时,我认为问题在于渲染MyClickable元素数组。我们不会使用循环,而是使用map,这是React +
JSX中的典型情况。以下应该为您提供与上述相同的结果,但是它适用于一系列元素。

// New render method for `Container`
render() {
  const clickables = [
    { name: "a" },
    { name: "b" },
    { name: "c" },
  ]

  return <div>
      { clickables.map(function(clickable, i) {
          return <MyClickable key={ clickable.name }
            name={ clickable.name }
            index={ i }
            isActive={ this.state.activeIndex === i }
            onClick={ this.handleClick }
          />
        } )
      }
  </div>
}


 类似资料:
  • 问题内容: 保持不变,尽管我在函数中调度了一个动作: 输出为NO_AUTH(的初始值) 减速器: 知道为什么吗? 问题答案: 您当前正在直接在未映射到的componentDidMount内部调度: 这应该做的工作: 现在,这将获得authState:

  • 在这种情况下,我更改选择元素并调用数据更新方法。该方法从状态获取值。但是当数据更新时,状态还没有改变。当您再次调用数据更新时,状态已经更新了如何正确进行更新? 反应成分

  • 有一个案例我很困惑。 我有一个对象redux状态:{show:true,creative:{name:'a',tags:[t1,t2,t3]}。此对象已通过“react redux”的“connect”功能映射到道具。 当我改变属性“显示”或“creative.name”时,它确实会触发重新渲染。但是如果我将t0追加到"creative.tags",它就不会运行re-渲染。 我必须分配一个新变量来

  • 编辑:这是在添加到购物车按钮onclick事件时执行的函数: addToCart action creator如下所示:

  • 问题内容: 当用鼠标单击时,如何检测JRadioButton从“未选中”更改为“选中”?我曾尝试在按钮上使用ActionListener,但是每次单击单选按钮时都会触发该事件,而不仅仅是在将状态更改为“选定”时触发。 我曾想过要维护一个记住按钮状态的布尔变量,并在ActionListener中对其进行测试以查看是否更改其状态,但是我想知道是否有更好或更干净的解决方案。 问题答案: 看一下JRadi

  • 问题内容: 有人知道如何在不更改url的情况下更改ui路由器状态吗?如下代码所示;在某些情况下,需要将用户重定向到403或401状态。我希望能够执行此重定向而无需更改url。 问候,klmdb 问题答案: 将选项传递给$ state.go 实际使用它:http : //plnkr.co/edit/w2aolrt9wdW3EFcEB3Lw?p=preview