问题描述
import { configureStore } from '@reduxjs/toolkit';
import { enableMapSet } from 'immer';
import { reducers } from './reducers';
enableMapSet();
export function configureStore() {
const rootReducer = combineReducers({
...reducers,});
return configureStore({
reducer: rootReducer,});
}
const store = configureStore();
export type Appdispatch = typeof store.dispatch;
export default store;
虽然我安装了 immer
并调用了 enableMapSet()
,但我的应用加载时仍然出现错误:
未处理的拒绝(错误):[Immer] 'MapSet' 的插件尚未加载到 Immer。要启用该插件,请在初始化应用程序时导入并调用 enableMapSet()
。
我应该如何使用 Redux Toolkit 配置 enableMapSet
?
解决方法
这里有两个想法:
- 您的应用中可能有两个不同的 Immer 副本
- 话虽如此,you should not be putting non-serializable objects like
Map
s andSet
s into the Redux state anyway,这就是我们不首先打开enableMapSet
的原因。
previously accepted answer 至少有助于我找出我遇到的问题,类似于 OP。
我一直在旧版本的 Redux 中存储 Map
很长一段时间没有问题,我看到你不应该在整个互联网上这样做的声明,但它几乎没有任何理由。我偶尔看到的一个原因是它们不可序列化。但是,我不会将我的 Redux 状态保存到例如LocalStorage 所以可序列化的问题似乎不会影响我。
为了解决 OP 的问题,鉴于已接受答案的建议,即我的应用程序中可能存在多个版本的 immer
,我转到我的 yarn.lock
文件以查看哪个版本 {{1} } 依赖于 (@reduxjs/toolkit
as of 7.0.3
) 并确保我添加到我自己的 reduxjs/tookit@1.4.0
中的那个是相同的。 (package.json
安装了比 Redux 使用的新版本的 yarn add immer
)。
一旦我进行了更改,我对 immer
的调用就消除了错误 OP,而我也有。