为何在Next.js的_app.tsx中Redux的me请求被调用两次?
为什么Next.js中_app.tsx的useEffect空依赖仍触发两次请求?
核心原因:开发环境的Strict Mode
Next.js在开发模式下默认启用React Strict Mode,这个模式会刻意重复调用useEffect、组件挂载/卸载函数,目的是帮你提前检测代码中的非幂等副作用(比如重复请求导致的数据不一致、状态异常)。这种重复执行仅存在于开发环境,生产环境会自动恢复正常,不会出现两次请求的情况。
其他可能的次要原因
如果你的store(比如Redux)存在配置问题,可能导致dispatch被意外触发多次,但根据你描述“注释这段代码请求次数为0”,这个可能性极低,核心原因还是Strict Mode。
解决办法
- 开发环境直接忽略:这是Strict Mode的正常检测行为,生产环境不会出现,无需额外处理。
- 关闭Strict Mode(不推荐):如果实在不想看到重复请求,可以在
next.config.js中关闭该模式:
但关闭后会失去Strict Mode的bug检测能力,不建议在开发阶段这么做。module.exports = { reactStrictMode: false, } - 让请求支持幂等:优化
me接口,确保多次调用不会产生不良影响(比如返回相同结果、不会重复修改后端数据),这是更健壮的生产级解决方案。
内容的提问来源于stack exchange,提问作者János
相关产品推荐
相关产品推荐

