可以将数组推送到处于状态的数组吗

时间:2019-01-08 11:11:00

标签: javascript reactjs

我们有subjectChecks:[]作为状态。我担心这种更改状态的方法会出错。通过按这种方式更改状态是否可以?

handleSubjectChange = (termID,subjectID) => event => {
          if(event.target.checked){
              this.state.subjectChecks.push({termID,subjectID});
          } else {
              this.state.subjectChecks.pop({termID,subjectID});
          }
          //this.setState({ [termID]: event.target.checked });
      };

3 个答案:

答案 0 :(得分:1)

是的,这种更改状态存储数组的方法是错误的。您应该制作原始数组的副本,修改副本并使用setState进行设置:

let arr = this.state.subjectChecks.slice() //copy array
// modify arr as necessary
this.setState({subjectChecks: arr})

答案 1 :(得分:1)

改用assign

this.setState({
    subjectChecks: [...this.state.subjectChecks, {termID,subjectID}]
});

答案 2 :(得分:0)

React(和redux)是基于状态不变性的原理构建的。您应该始终使用setState()更新状态,否则react不会检测到状态更改。请参阅this答案。

  

请不要直接更改this.state,因为之后调用setState()可能会替换您所做的更改。将此this.state视为不可变。

     

https://reactjs.org/docs/react-component.html#state