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

排查代码中触发Immer报错‘仅支持设置数组索引与length属性’的原因

解析Immer报错“Immer only supports setting array indices and the 'length' property”的原因

让我帮你拆解一下这个问题,其实根源出在你的初始状态设置上——哪怕你现在只修改status字段,也会触发这个错误:

  • 初始状态的类型与实际值不匹配:你定义的FoodLogs类型里,foodLogs是Array<FoodLogState>类型,但在initialState里却把它设成了null。Redux Toolkit依赖Immer来处理不可变状态,Immer会根据你声明的类型和实际值创建代理对象。当实际值是null但预期是数组时,Immer的内部代理逻辑会混乱:它会尝试把null当作数组类型去处理,哪怕你只是修改其他字段,也会触发这个数组相关的错误。

  • 为什么之前类似操作没问题?:你提到之前做过类似操作没报错,大概率是因为当时你把foodLogs的初始值设成了空数组[]而不是null。这样Immer能正确识别数组类型并创建对应的代理,自然不会触发这个错误。

修复方案

只需要把初始状态里的foodLogs从null改成空数组即可:

const initialState: FoodLogs = {
  foodLogs: [], // 替换原有的null
  status: "idle",
};

另外,建议你确认getFoodState返回的response确实是Array<FoodLogState>类型,这样后续放开注释里的state.foodLogs = action.payload时,也能保证类型匹配,避免再次出现类似问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 19:37:35