javascript - React 组件不会在更新状态时重新渲染

标签 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(item,index) {
  this.state.categories[index].selected = !this.state.categories[index].selected;
  this.forceUpdate();
}

你知道如何在没有 forceUpdate() 的情况下实现它吗?我已经读过堆栈我应该避免使用 this.forceUpdate()

最佳答案

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

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

根据文档:

NEVER mutate this.state directly, as calling setState() afterwards may replace the mutation you made. Treat this.state as if it were immutable.

关于javascript - React 组件不会在更新状态时重新渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45187529/

相关文章:

css - 如何在 react.js 中创建动画颜色过渡?

javascript - 登录页面状态

javascript - Form Preventdefault 不起作用,重定向到发布 url

javascript - 如何展开视频框并将其置于悬停中心

javascript - Bootstrap 模式不会在点击时关闭

javascript - 运行 JSX 代码(ReactJS)需要 Babel transpile?

javascript - 如何计算乘客总数

javascript - div溢出时div最大宽度交替

node.js - ExpressJS 服务器每晚离线 - 502 Bad Gateway

css - 在 React 的 Material-ui 上覆盖 TableRow 悬停 CSS