如何取消`this.setState`?

Ric*_*ler 4 setstate reactjs

所以我知道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)

Ric*_*ler 6

很抱歉在这里回答我自己的问题,但是较新的React 16允许您取消setState

对setState行为的细微更改:

  • 调用setStatenull不再触发更新。这使您可以决定是否要重新渲染更新程序功能。
  • setState直接在render中调用总是会导致更新。以前不是这种情况。无论如何,您不应该setState从render 调用。
  • setState现在,回调(第二个参数)在componentDidMount/ componentDidUpdate之后立即触发,而不是在所有组件都呈现之后触发。

资源


返回之间的重要区别null,返回previousState的是,回国null做什么样的PureComponent功能以及防止了render被称为在所有的方法。

从React 16开始,即使您返回,调用setState始终会使该render方法触发previousState


bennygenel不过,就@而言,您应该使用shouldComponentUpdate防止重新渲染。


Jos*_*gel 5

“告诉 React 不要做任何事情”的成语是“返回之前的状态”。由 React 的内部管理来确定 DOM 没有实际更改,并且用户不会看到任何内容。特别是,shouldComponentUpdate如果两个对象相同,默认将返回 false。

所以你唯一需要的是:

return previousState;