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

React项目中Redux reducer未触发问题排查求助

问题分析与解决方案

首先,核心问题出在你的mapDispatchToProps配置里,导致thunk action没有正确被触发:

1. 修正mapDispatchToProps中的调用方式

你当前的代码是直接把fetchData函数传递给dispatch,而不是调用它返回thunk函数:

// 错误写法
const mapDispatchToProps = dispatch => {
  return {
    onFetchData: () => dispatch(actions.fetchData),
  }
}

fetchData是一个返回函数的thunk action创建器,你需要调用它,让它返回那个包含异步逻辑的函数,再传递给dispatch:

// 正确写法
const mapDispatchToProps = dispatch => {
  return {
    onFetchData: () => dispatch(actions.fetchData()), // 这里添加()调用fetchData
  }
}

这样redux-thunk中间件才能识别并执行这个异步action,进而触发setBalance和对应的reducer分支。

2. 检查Reducer中的数据结构处理

从你的代码看,你在reducer里写了action.donnees.data,但在fetchData中你dispatch的是setBalance(response.data)——如果你的后端接口/movements.json返回的直接是需要处理的收支数据(比如firebase那种键值对结构),而不是嵌套在data字段里的对象,那这里会导致action.donnees.data为undefined,进而无法正确计算总和。你需要调整reducer中的数据获取逻辑:

const setBalance = (state, action) => {
  let fetchedMvts = []
  // 去掉.data,直接遍历action.donnees
  for(let key in action.donnees) {
    fetchedMvts.push({...action.donnees[key]})
  }
  // ... 后续求和逻辑不变
}

3. 额外验证点

  • 确保已经正确安装了redux-thunk:执行npm install redux-thunk(如果还没安装的话),你的store配置已经添加了这个中间件,这部分是正确的。
  • 检查axios请求是否成功:你已经在fetchData里打印了response.data,确认这个数据的结构是否符合你的预期,比如是否包含type和amount字段。

完成以上修改后,你的reducer应该就能正确匹配SET_BALANCE的action type,进而更新incomes和expenses状态了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 17:22:48