我的情景是:
this.setState({firstState:1})
if(condition){
this.setState({secondState:2})
}
firsState应始终设置为1,但如果满足某个条件,则secondState应仅设置为2.
这是不好的做法,因为状态会在彼此之后直接更新两次?它会影响性能吗?
这段代码更好吗?
if(condition){
this.setState({firtState:1,secondState:2})
}else{
this.setState({firstState:1})
}
答案 0 :(得分:2)
您可以更新一次:
const myAmazingState = {
firstState: 1,
secondState: condition ? 2 : this.state.secondState
}
然后更新您的州
this.setState({...myAmazingState})
希望它有意义
答案 1 :(得分:1)
即使你按顺序发出多个setState
个电话,React也可以将它们分批到一个交易电话中。
所以没有缺点。
请参阅React may batch multiple setState() calls into a single update for performance.
答案 2 :(得分:0)
React实际上为您提供了实现这一目标的方法。正如前面所指出的,当前方法的问题在于React可能批量setState
,但您可以使用功能setState
。你的代码看起来像这样。
this.setState((state, props) => {
// update state
if(condition) {
//update state 2
}
// return a single new object for your new state
});
答案 3 :(得分:0)
React.js被优化为经常调用setState,每次调用setState时它实际上并不总是重新呈现,但实际上会将多个状态更改捆绑到一个重新呈现中。
为了更改状态两次,您需要执行以下操作以避免任何可能的问题,因为this.setState是一个异步函数。
this.setState({data: {}}, () => this.setState({data: {name: "tom"}}))
在这里你可以看到,我们正在传递setState一个回调,一旦它完成设置状态就会执行。