搜索

首页  >  问答  >  正文

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

<p>我认为你对这个问题有更好的解决方案: 我有一个包含我的猫对象数组的文件:</p> <pre class="brush:php;toolbar:false;">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 } ];</pre> <p>我有:</p> <pre class="brush:php;toolbar: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></pre> <p>我的filterCategory函数:</p> <pre class="brush:php;toolbar:false;">filterCategory(item,index) { this.state.categories[index].selected = !this.state.categories[index].selected; this.forceUpdate(); }</pre> <p>你知道我怎么在不使用<code>forceUpdate()</code>的情况下实现它吗?我在Stack上读到应该避免使用<code>this.forceUpdate()</code>。</p>
P粉277464743P粉277464743453 天前464

全部回复(2)我来回复

  • P粉001206492

    P粉0012064922023-08-21 09:33:19

    不要直接修改状态

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

    回复
    0
  • P粉638343995

    P粉6383439952023-08-21 09:06:42

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

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

    根据文档:

    回复
    0
  • 取消回复