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

Redux中returnSlidesReducer函数执行两次的原因排查求助

为什么我的Redux reducer会执行两次?

我来帮你排查这个问题,看了你的代码,主要有两个关键点需要注意:

1. 模块加载时的手动调用触发第一次执行

你的slides.js文件最后有一行returnSlidesReducer(jsonFile),这行代码会在模块被import的时候立刻执行——也就是应用刚启动、Redux还没正式使用这个reducer的时候,它就已经跑了一次。这就是你看到第一次console.log的原因。

Reducer是给Redux Store调用的,完全不需要你手动执行。你应该删掉这行调用,同时可以把JSON文件设置为reducer的默认参数,作为Store的初始状态。修改后的代码如下:

import jsonFile from '../sliderContent.json';
const returnSlidesReducer = (slidesContent = jsonFile) => {
  console.log(slidesContent);
  return slidesContent;
}
// 移除这行手动调用:returnSlidesReducer(jsonFile);
export default returnSlidesReducer;

2. React Strict Mode导致的开发环境二次执行

如果删掉手动调用后,你还是看到reducer执行两次,那大概率是React Strict Mode的特性。在开发环境下,Strict Mode会故意让纯函数(包括Redux reducer、组件渲染函数等)执行两次,目的是帮你检测意外的副作用——比如在reducer里修改传入参数、执行异步操作这类违反Redux规则的行为。

这种情况是正常的,生产环境下Strict Mode会自动禁用,不会出现重复执行的问题。如果你想验证,可以暂时把index.js里的<React.StrictMode>标签移除,就能看到reducer只执行一次了。

总结

先移除reducer文件里的手动调用,这是不必要的错误操作;如果还有两次执行,那就是Strict Mode的开发环境检测机制,无需担心,生产环境会恢复正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:53:34