在 redux 工具包中使用 immer `MapSet` 插件

问题描述

我有一些切片在它们的状态下使用 Set我有这个代码

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

解决方法

这里有两个想法:

,

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,而我也有。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...