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
相关产品推荐
相关产品推荐

