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

React-Redux使用combineReducers修改一个reducer导致另一个返回undefined如何修复

问题原因

两个问题都出在reducerTherm的实现逻辑上:

  • default分支返回值不符合状态结构要求:reducerTherm对应的状态是{therm: string}类型的对象,但你在default分支直接返回了state.therm字符串,会直接把该切片的状态从对象改成字符串。当触发ADD_SRC这类不属于reducerTherm处理的action时,所有切片reducer都会执行,reducerTherm走到default分支后,此时state已经是字符串类型,state.therm取值为undefined,触发报错。
  • SEARCH_THERM分支返回逻辑错误:你直接返回了action.payload,如果payload是搜索的字符串值,也会把该切片状态改成字符串,同样会引发后续的undefined问题。
修复方案

修改reducerTherm的实现,保证所有分支返回的都是符合结构要求的状态对象:

interface Props {
  therm: string;
}

const initialState: Props = {
  therm: "",
};

export default function reducerTherm(state: Props = initialState, action: any) {
  switch (action.type) {
    case "SEARCH_THERM":
      // 返回新的状态对象,保留结构,只更新therm字段
      return {
        ...state,
        therm: action.payload
      };
    default:
      // 不处理的action直接返回完整的当前state对象
      return state;
  }
}

额外提示:reducerSrc的ADD_SRC分支也存在同样的结构风险,如果你传的payload不是{src: xxx}格式的对象,建议也改成return {...state, src: action.payload}的写法,避免后续出现同类结构错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 01:54:03