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

Redux-Toolkit中console.log(state)触发TypeError: Cannot perform 'getPrototypeOf'

Redux-Toolkit中reducer打印state报错及订单状态更新解决办法

问题原因

你遇到的TypeError: Cannot perform 'getPrototypeOf'错误,是因为Redux-Toolkit(RTK)的reducer里的state是Immer库创建的代理对象,并非普通JavaScript对象。直接用console.log(state)或者试图直接遍历这个代理对象时,会触发Immer内部的代理机制报错。

解决步骤

1. 正确打印state

要查看reducer中的state,需要从RTK导入current方法,它会返回state的只读普通对象快照,避免触发代理错误:

import { createSlice, current } from '@reduxjs/toolkit';

// ...
reducers: {
  confirmOrder: (state) => {
    // 正确打印state
    console.log(current(state));
    // 后续逻辑
  }
}

2. 实现订单批量确认逻辑

利用RTK的Immer特性,你可以直接“修改”state中的订单属性,Immer会自动帮你生成不可变的更新结果:

confirmOrder: (state) => {
  // 遍历所有订单,设置isConfirmed为true
  state.forEach(order => {
    order.isConfirmed = true;
  });
}

注意事项

  • 不要手动返回新的state对象,Immer会处理不可变更新逻辑;
  • 如果你的订单状态是嵌套结构,同样可以直接修改嵌套属性,无需手动解构重组对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 17:06:50