Performance 如果上一个状态和下一个状态相同,是否会触发状态更改?
在我的状态更改处理程序上,我是否需要执行以下操作:Performance 如果上一个状态和下一个状态相同,是否会触发状态更改?,performance,reactjs,Performance,Reactjs,在我的状态更改处理程序上,我是否需要执行以下操作: deviceSize = ... this.setState((prevState) => { if (prevState.deviceSize != deviceSize) { return { deviceSize } } else { return null } }) 或者,以下这些就足够了吗 this.setState((prevState) => { return
deviceSize = ...
this.setState((prevState) => {
if (prevState.deviceSize != deviceSize) {
return {
deviceSize
}
} else {
return null
}
})
或者,以下这些就足够了吗
this.setState((prevState) => {
return {
deviceSize
}
})
我担心的是,如果我返回某个内容,它将进行一些UI更新。你在这里错了。setState从不检查值。调用时,它只是重新渲染视图 要检查组件是否应该重新呈现,请选中
shouldComponentUpdate()方法。
`shouldComponentUpdate(nextProps, nextState)` {
1. it is triggered before the re-rendering process .
2. It tells render() method should be called or not.
3. If nothing changed, you can avoid re-render by returning false.
}
我根本不会走这条路。除非您知道设置状态的时间,否则不应调用设置状态 使用
componentdiddupdate
了解何时调用setState。就像医生说的
通常,我们建议对此类逻辑使用componentDidUpdate()
相反
比如说
componentDidUpdate(prevProps, prevState) {
if (prevState.something !== something) { // you can compare previous state or props with current state or props
this.setState({something: something});
}
}
请注意,只有当您真正想调用setState时才会调用它如果状态相同,则不会有任何更新。TL;DR如果您的组件是纯的,那么您的第二个示例就足够了。如果没有状态更改,为什么要调用set state?首先,您不应该这样做调用setState将始终触发shouldComponentUpdate并完全运行渲染函数,如果shouldComponentUpdate返回true(或没有shouldComponentUpdate),shouldComponentUpdate的问题是,下面的所有内容将不再根据此更新。。。是 啊如果没有什么变化,那你为什么担心呢?如果状态与技术上相同,则不会发生任何更改。因为呈现的组件可能会使用
此.State
值,在这种情况下,这无关紧要,但如果其自身的状态仅在组件内发生更改,则会怎么样。@JohnRuddell完全同意。在使用任何东西之前,我们必须了解用例。