为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用反应正确更新数组中的状态?

如何使用反应正确更新数组中的状态?

宝慕林4294392 2021-10-29 17:08:40
在上一个问题中,我得到了有关如何更新数组的答案,这是通过以下方式实现的:onClick(obj, index) {  if (data.chosenBets[index]) {    // Remove object.    data.chosenBets.splice(index, 1);  } else {    // Add object.    data.chosenBets.splice(index, 0, obj);   }}这不会在我的 UI 中触发重新渲染。如何在触发重新渲染时更新数组(以与上述相同的方式)?
查看完整描述

3 回答

?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

我假设您已经在您的州保存了该数组。然后你可以做这样的事情:


onClick = (idx) => {

  let arr = [...this.state.arrayToModify];

  arr.splice(idx,1);

  this.setState({ arrayToModify: arr });

}

希望这可以帮助!


查看完整回答
反对 回复 2021-10-29
?
慕的地10843

TA贡献1785条经验 获得超8个赞

只是改变一个状态不会触发重新渲染。您需要调用setState()函数:


// class component

onClick = () => {

  // update state

  this.setState(newState);

}


// functional component

...

  const [ state, setState ] = useState();


  ...


  setState(newState);

此外,执行不可变状态更新非常重要,因为 React 通常依赖于 refs(尤其是在使用memo()或 时PureComponent)。因此,最好使用相同的项目创建新的数组实例。


onClick(obj, index) {

  let newData;

  if (data.chosenBets[index]) {

    newData = data.slice();

    newData.chosenBets.splice(index, 1);

  } else {

    newData = [ obj, ...data ]; 

  }


  setState(newData);

}

并且您始终可以使用一些库进行不可变更新,例如immer、object-path-immutable等。


查看完整回答
反对 回复 2021-10-29
?
慕容3067478

TA贡献1773条经验 获得超3个赞

在编写 React 代码时尽量避免使用不纯函数。在这里,拼接是一种不纯的方法。我建议使用以下代码:


onClick(obj, index) {

  if (this.state.data.chosenBets[index]) {

    // Remove object.

    const data = {

        ...this.state.data,

        chosenBets: this.state.data.chosenBets.filter((cBet, i) => i !== index)

    };

    this.setState({ data });

  } else {

    // Add object.

    const data = {

        ...this.state.data,

        chosenBets: [ ...this.state.data.chosenBets, obj ]

    };

    this.setState({ data }); 

  }

}


查看完整回答
反对 回复 2021-10-29
  • 3 回答
  • 0 关注
  • 122 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信