【问题标题】:Redux does not update state immediatelyRedux 不会立即更新状态
【发布时间】:2018-07-09 13:42:23
【问题描述】:

我对 Redux 有问题,更可能不是问题而是误解。 如果我在一个函数中调度并在存储中写入一个新值,那么我不能立即从存储中获取一个新值。

示例:

    testFunc = () => {
        console.log('in func: before', this.props.count);   //state store
        this.props.onButtonIncrementClick();                //dispatch a new state in the store
        console.log('in func: after', this.props.count);    //get the old state store
    };

实例: https://codesandbox.io/s/yk1jzjv6l1

我怀疑这与异步有关,因为如果我将状态包装在 setTimeout() 中,则会出现新状态。

我很高兴听到关于为什么以及如何将值写入存储并立即从中读取它们的解释。

【问题讨论】:

  • “我很高兴听到关于为什么以及如何将值写入存储并立即从中读取的解释。”听起来像XY-problem。一般可以使用componentDidUpdate 方法获取新值。

标签: javascript reactjs redux react-redux


【解决方案1】:

setState is not synchronous,不管是你还是 Redux 都在更新它。

正如你所说,这是一个误解。当您直接更新它时,您可以提供要执行的回调,例如,

setState({ foo }, () => somethingWith(this.state));

(注意组件在回调之前已经重新渲染。)

如果您有需要在“外部”状态更新(例如 Redux)之后运行的逻辑,则有 componentDidUpdate,但它也可能表明存在架构问题。

【讨论】:

  • 我认为组件本地状态和 redux 全局状态是不同的东西,当我使用 redux 时,它不会与 setState(组件本地状态)相交。我以为我没有异步 setState() 的问题,只使用 redux 来处理状态。
  • 我概括了——Redux 也不是同步的,例如,状态更新可能是批处理的、重新排序的等等。
猜你喜欢
  • 2021-11-07
  • 2016-07-14
  • 2018-08-05
  • 2021-05-20
  • 1970-01-01
  • 1970-01-01
  • 2016-01-01
相关资源
最近更新 更多