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

Redux store.subscribe报错__webpack_require__.i(...) is not a function求助

问题排查:Redux subscribe 结合 lodash throttle 导致的 TypeError

首先咱们来定位这个错误的核心原因:你调用store.subscribe的方式存在参数位置错误,这直接引发了打包时的函数类型异常。

错误根源分析

你的代码里是这么写的:

store.subscribe(throttle(() => {
  saveState({ cart: store.getState().cart });
}), 1000);

这里有两个关键问题:

  • store.subscribe仅接受一个参数:状态变化时执行的回调函数,你把1000作为第二个参数传入,完全不符合它的API规范
  • 节流函数throttle的延迟时间参数1000没有传递给throttle本身,导致throttle没有生成预期的节流函数,最终让webpack在处理时抛出了类型错误

修复方案

把1000作为throttle的第二个参数,正确包裹在throttle的调用括号内:

store.subscribe(throttle(() => {
  saveState({ cart: store.getState().cart });
}, 1000)); // 将延迟时间移至throttle的参数列表中

额外优化建议

  1. 代码可读性优化:可以把回调函数抽离出来,让逻辑更清晰:
const saveCartToLocalStorage = throttle(() => {
  saveState({ cart: store.getState().cart });
}, 1000);

store.subscribe(saveCartToLocalStorage);
  1. 依赖兼容性检查:虽然你用的lodash按需导入方式是正确的,但如果lodash版本和现有项目依赖存在冲突,也可能引发奇怪的打包错误。可以尝试更新lodash到稳定版本:
npm install lodash@latest --save
  1. 保持localStorage操作的安全性:你的saveState和loadState已经做了try-catch包裹,这很好,能避免某些浏览器禁用localStorage导致的页面崩溃,建议继续保持这个写法。

为什么注释掉代码错误就消失?

当你注释掉store.subscribe的代码块后,webpack不再处理这段错误的函数调用逻辑,自然也就不会触发那个类型错误了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:45:03