You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Redux store更新成功但组件未触发重渲染问题求助

问题解决方案

1. 优先级最高:修正selector取值路径

从你mapStateToProps中读取state.options、state.oidc的写法可以判断,你使用了combineReducers拆分多模块状态,loadPlanningReducer对应的状态实际挂载在根state的某个子键下(比如combineReducers配置时对应的键名为loadPlanning)。
你当前的selector直接从根state读取loadPlanning、pending、error字段,但这些字段实际存放在子状态节点下,因此永远无法读取到更新后的值,自然不会触发组件重渲染。
请按你的combineReducers配置修正selector取值路径,示例:

// 假设combineReducers中loadPlanningReducer对应的键名为loadPlanning
export const getLoadPlanning = (state) => state.loadPlanning.loadPlanning;
export const getLoadPlanningPending = (state) => state.loadPlanning.pending;
export const getLoadPlanningError = (state) => state.loadPlanning.error;

你观察到的pending变化时触发组件更新,大概率是其他模块的reducer也定义了pending字段,更新的是其他模块的状态,而非loadPlanningReducer内的pending。

2. 检查action payload字段匹配性

你dispatch成功回调时传入的是initialiseLoadPlanningSuccess(res.data),需要确认对应的action creator返回的action对象中,是否存在loadPlanning字段:

// 正确示例,和reducer取值逻辑匹配
const initialiseLoadPlanningSuccess = (data) => ({
  type: INITIALISE_LOAD_PLANNING_SUCCESS,
  loadPlanning: data
})

如果你的action creator将参数挂载到了payload等其他字段下,reducer中读取action.loadPlanning.items时会抛出异常,导致reducer无法返回新状态,store不会更新。你可以选择修改reducer取值逻辑为action.payload.items,或者调整action creator的字段命名。

3. 冗余写法优化(非强制,降低后续出错概率)

你reducer中SUCCESS分支的写法存在冗余,可以直接用对象扩展运算符替代Object.assign,去掉多余的状态展开:

if (action.type === INITIALISE_LOAD_PLANNING_SUCCESS) {
    console.log('updating state');
    return {
        ...state,
        pending: false,
        loadPlanning: state.loadPlanning.concat(action.loadPlanning.items)
    };
}

原写法中Object.assign({}, state, { ...state, xxx })的...state属于重复操作,无实际作用且可能带来意外的字段覆盖风险。

内容的提问来源于stack exchange,提问作者LeightonHolmes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 14:54:02