我们有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 });
};
答案 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视为不可变。