将 immer `MapSet` 插件与 redux 工具包一起使用

nro*_*fis 16 redux immer.js redux-toolkit

我有一些在其状态下使用Sets 的切片。我有这个代码:

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;
Run Code Online (Sandbox Code Playgroud)

尽管我安装了immer并调用enableMapSet(),但加载应用程序时仍然出现错误:

未处理的拒绝(错误):[Immer]“MapSet”插件尚未加载到 Immer 中。要启用该插件,请enableMapSet()在初始化应用程序时导入并调用。

我应该如何配置enableMapSetRedux Toolkit?

man*_*roe 11

之前接受的答案至少对我解决我遇到的问题有帮助,类似于OP。

我已经Map在旧版本的 Redux 中存储了很长一段时间,没有出现任何问题,我看到了这样的说法:你不应该在互联网上这样做,但它几乎没有理由合理。我偶尔看到的原因之一是它们不可序列化。但是,我不会将 Redux 状态保存到 LocalStorage 等,因此可序列化问题似乎不会影响我。

为了解决OP的问题,鉴于已接受的答案的建议,即我的应用程序中可能存在多个版本immer,我转到我的yarn.lock文件以查看哪个版本@reduxjs/toolkit取决于(7.0.3截至reduxjs/tookit@1.4.0),并确保我添加到我自己的版本中package.json是一样的。(yarn add immer安装了比 Redux 使用更新的版本immer)。

一旦我做出了改变,我就打电话去enableMapSet()摆脱错误OP,我就这么做了。


mar*_*son 9

这里有两个想法: