React组件在更新状态时不会重新呈现

时间:2017-07-19 10:15:26

标签: javascript reactjs

我想你知道更好的解决方案: 我有我的猫对象数组的文件:

var categories = [
  {
    "id": 1,
    "name" : "Faktury",
    "selected" : false
  },
  {
    "id": 2,
    "name" : "Telefony",
    "selected" : false
  },
  {
    "id": 3,
    "name" : "Komputery",
    "selected" : false
  },
  {
    "id": 4,
    "name" : "Rachunkowośc",
    "selected" : false
  },
  {
    "id": 5,
    "name" : "Finanse",
    "selected" : false
  }
];

我有:

<ul className="category">
  {this.state.categories.map((item,index) =>
    <li onClick={()=>this.filterCategory(item,index)} key={item.id} className={item.selected? 'active' : ''}>{item.name}</li>
  )}
</ul>

和我的filterCategory:

filterCategory(item,index) {
  this.state.categories[index].selected = !this.state.categories[index].selected;
  this.forceUpdate();
}

你知道如何在没有forceUpdate()的情况下做到这一点吗?我已经阅读了堆栈,我应该避免使用this.forceUpdate()

2 个答案:

答案 0 :(得分:2)

使用setState会自动触发重新呈现,因此不要直接改变状态,而是使用setState来更新状态。

filterCategory(item,index){
   var categories = [...this.state.categories];
   categories[index].selected = !categories[index].selected;
   this.setState({categories})
}

根据DOCS:

  

不要直接改变this.state,因为之后调用setState()可能   替换你所做的突变。把它当作状态对待   不可变的。

答案 1 :(得分:0)

Do Not Modify State Directly

使用setState方法进行状态更改。