Redux Store 什么时候更新订阅组件的 props——是异步事件吗?

When does Redux Store updates the props of a subscribed component-- Is it asynchronous event?

我正在尝试解决一个场景,我正在调度一个同步的 redux 动作(使用 typesafe-actionscreateAction),然后不久之后进行依赖于更新的道具的网络调用来自商店。

场景:

在 clearFilters 处理函数(单击清除过滤器按钮时调用的处理函数)中,我正在调度一个同步操作,然后进行如下网络调用:

clearFilters = (): void => {
    this.props.resetFilters(); //action dispatched
    this.refreshData;   //network call
};

refreshData 函数中,我的组件需要更新的过滤器道具,并基于它创建一个 searchCondition 以作为有效负载传递给列表 api 调用。

refreshData = (): void => {
    const { listData, filters } = this.props; //get the filters prop

    //Expected filters to be updated from the store post dispatch of action
    const SearchCondition: SearchCondition = createSearchConditions(filters);
    
    listData({
        SearchCondition,
        MaxResults: this.maxRecordsCount,
        SortFields: this.getSortFields(),
    }),
 );
};

我的组件使用 mapStateToProps:

订阅了 filters 道具
const mapStateToProps = (state: RootState) => ({
   filters: state.common.filter.filters,
});

考虑到这是我面临的问题的状态,我尝试通过在代码中放置调试点来调试发生的情况:

  1. 调度动作时(在 clearFilters 函数内)
  2. reducer 内部,返回更新后的状态。
  3. 调用网络调用时(在clearFilters函数内)
  4. refreshData调用中。

在 reducer returns 更新状态后,根据调试知识,store 没有立即发送更新的 props。相反,控件返回到下一行,即 this.refreshData(),它使用旧过滤器数据进行网络调用。只有在 clearFilters 函数调用完成后,在我的 componentDidUpdate 中,我才能看到道具更新发生了。

这是否表示 redux 状态变回 store 并且最终订阅的 prop 更新以异步方式发生?如果是这样,它是如何发生的?商店发送更新的道具是否在主线程中执行?

任何 pointers/documentation 都会很有帮助。

调度是同步的,React更新的排队是同步的。然而,在整个事件处理完成之前,React 不会 re-render 该组件,并且 this.props 不会 更新直到渲染发生之后。所以,不,你不能在调度一个动作后立即访问 this.props 并期望它已经更新。那永远不会是真的。

我建议阅读这些帖子,这些帖子对 React 和 React-Redux 进行了广泛的详细介绍: