许多人提倡不变性,因为他们完全使用redux和反应,但我仍然看到人们使用push而不是concat.
以此代码为例:
submitComment() { console.log('submitComment: '+JSON.stringify(this.state.comment)) APIManager.post('/api/comment', this.state.comment, (err, response) => { if (err){ alert(err) return } console.log(JSON.stringify(response)) let updateList = Object.assign([], this.state.list) updatedList.push(response.result) this.setState({ list: updatedList }) }) }
在这种情况下,它有关系吗?推送上面的问题是什么?
不变性用于反应,而不仅仅是因为还原.不应直接改变React组件的状态.根据文件:
永远不要直接改变this.state,因为之后调用setState()可能会替换你所做的突变.把this.state看作是不可变的.
此外,不变性也有助于和解.如果props是不可变的,您可以进行浅等式检查以查看它是否已更改,并相应地进行渲染.
在您的代码updatedList
中使用克隆到新数组Object#assign
.现在您可以将Array#推送到数组,而无需更改原始数组.使用Array#concat更短,更易读:
const updatedList = this.state.list.concat(response.result);