所以我知道React中的设置状态是异步的,并且全部,我们这样设置状态:
this.setState(previousState => {
return { /* some new state that uses `previousState` */ }
});
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:如何取消this.setState?假设我previousState用来确定不需要渲染更新。我该如何取消setState并告诉React不要重新渲染任何东西。
this.setState(previousState => {
if (/* previousState is fine */) {
// tell react not to do anything
} else {
return { /* some new state */ }
}
});
Run Code Online (Sandbox Code Playgroud)
很抱歉在这里回答我自己的问题,但是较新的React 16允许您取消setState。
对setState行为的细微更改:
- 调用
setState与null不再触发更新。这使您可以决定是否要重新渲染更新程序功能。setState直接在render中调用总是会导致更新。以前不是这种情况。无论如何,您不应该setState从render 调用。setState现在,回调(第二个参数)在componentDidMount/componentDidUpdate之后立即触发,而不是在所有组件都呈现之后触发。
返回之间的重要区别null,返回previousState的是,回国null做什么样的PureComponent功能以及防止了render被称为在所有的方法。
从React 16开始,即使您返回,调用setState始终会使该render方法触发previousState。
bennygenel不过,就@而言,您应该使用shouldComponentUpdate防止重新渲染。
“告诉 React 不要做任何事情”的成语是“返回之前的状态”。由 React 的内部管理来确定 DOM 没有实际更改,并且用户不会看到任何内容。特别是,shouldComponentUpdate如果两个对象相同,默认将返回 false。
所以你唯一需要的是:
return previousState;
| 归档时间: |
|
| 查看次数: |
2394 次 |
| 最近记录: |