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

调用Redux的UPDATE_DATA action时状态变为undefined问题求助

问题分析与修复

你的reducer在UPDATE_DATA操作后状态变为undefined,核心原因和修复点如下:

存在的问题

  1. 直接修改原状态:const newData = state.data只是获取了原数组的引用,修改newData会直接改动原state,违反React/Redux的状态不可变原则,同时也会导致状态更新无法触发组件重渲染。
  2. map函数误用:map的作用是生成新数组,不是用来原地修改原数组的,你在map里直接替换newData[index]的写法不符合其设计意图。
  3. 未返回新状态:UPDATE_DATA分支的代码块执行完后没有return新的状态对象,break之后函数无返回值,最终导致状态变成undefined。

修复后的代码

const initialState = { data: JSON.parse(localStorage.getItem('formData')) || [] };

const formReducer = (state = initialState, action) => {
  switch (action.type) {
    case 'ADD_DATA':
      return { ...state, data: [...state.data, action.payload] };
    case 'UPDATE_DATA': {
      const { id, data } = action.payload;
      // 用map生成新数组,匹配id的项替换为新数据,其余保留原项
      const newData = state.data.map(item => 
        item[0].uid === id ? data : item
      );
      // 返回新的状态对象,保证不可变性
      return { ...state, data: newData };
    }
    default:
      return state;
  }
};

export default formReducer;

额外说明

  • 修正了原代码里的拼写错误:intialState改为标准的initialState
  • 所有状态更新都通过生成新对象/数组实现,确保状态不可变,这样useSelector才能正确感知到状态变化并更新组件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 20:42:12