在 Redux 中,我在 redux-thunk 动作创建器中运行以下内容:
dispatch({type: "CASCADING_PROMPT_STATUS", promptName, list: 'model', status: 'disabled'});
dispatch({type: "CASCADING_PROMPT_STATUS", promptName, list: 'model', status: 'enabled'});
这会触发减速器两次,我可以在控制台中看到 Redux 状态从禁用 -> 启用。
在 React 中,我有以下组件,该组件具有连接到 CASCADING_PROMPT_STATUS 更新状态的props。
但是,在我的组件中,我正在检查状态是否在 componentDidUpdate(prevProps)
这不会触发。
如果我更改动作创建者以将第二次分派延迟setTimeout(<dispatch...>, 1);
甚至一毫秒,prevProps !== this.props,这正是我所期望的。
我的组件像这样连接到 redux:
const C_Component = connect(mapStateToProps, mapDispatchToProps, null, {pure: false})(Component);
React 会批量调整props吗?为什么我必须延迟第二次派遣?我认为 redux dispatch 是同步的。
编辑:我更新 redux 状态的方式如下:
var newState = {};
if (!_.isUndefined(state)){
newState = _.cloneDeep(state);
}
...
case "CASCADING_PROMPT_STATUS":
newState[action.promptName][action.list].disable = action.status === 'disabled';
break;