所以我知道React中的设置状态是异步的,并且我们设置状态如下:
this.setState(previousState => {
return { /* some new state that uses `previousState` */ }
});
所以我的问题是:如何取消this.setState
?假设我使用previousState
来确定我不需要呈现更新。如何取消setState
并告诉React不要重新渲染任何内容。
this.setState(previousState => {
if (/* previousState is fine */) {
// tell react not to do anything
} else {
return { /* some new state */ }
}
});
答案 0 :(得分:6)
很抱歉在这里回答我自己的问题,但是更新的React 16允许你取消setState
。
对setState行为的微小更改:
- 使用
setState
致电null
不再触发更新。如果要重新渲染,这允许您决定更新程序功能。- 直接在渲染中调用
setState
始终会导致更新。以前不是这种情况。无论如何,你不应该从渲染中调用setState
。setState
回调(第二个参数)现在在componentDidMount
/componentDidUpdate
之后立即触发,而不是在所有组件都已渲染之后触发。
返回null
和返回previousState
之间的重要区别是,返回null
会执行PureComponent
之类的操作,并阻止调用render
方法一点都不。
从React 16开始,即使您返回setState
,调用render
也始终会触发previousState
方法。
要{@ 1}},您应该使用bennygenel
来阻止重新渲染。
答案 1 :(得分:4)
成语"告诉React不做任何事情"是"返回先前的状态"。由React的内部管理人员决定DOM没有实际更改,用户看不到任何内容。特别是,如果两个对象相同,则默认shouldComponentUpdate
将返回false。
所以你唯一需要的是:
return previousState
;
答案 2 :(得分:1)
您不需要取消设置状态。您可以使用shouldComponentUpdate(nextProps, nextState)来决定组件是否应该更新。
答案 3 :(得分:0)
比较this.setState以外的状态,并根据它是否发生变化,触发this.setState?