我正在尝试将 redux persist 添加到 redux 工具包,但由于某种原因我得到了一个Exported variable 'store' has or is using name '$CombinedState' from external module ".../node_modules/redux/index" but cannot be named.
vscode 出错。
这是我的商店配置文件,添加了持久配置,如果我删除它,工作正常。
import { configureStore } from "@reduxjs/toolkit";
import { persistReducer } from "redux-persist";
import storage from "redux-persist/lib/storage";
import { createEpicMiddleware } from "redux-observable";
import rootEpic from "onsite/redux/rootEpic";
import rootReducer from "onsite/redux/rootReducer";
const epicMiddleware = createEpicMiddleware();
const persistConfig = {
key: "root",
storage: storage,
};
const persistedReducer = persistReducer(persistConfig, rootReducer);
// Line that shows error
const store = configureStore({
reducer: persistedReducer,
middleware: [epicMiddleware],
});
export default store;
epicMiddleware.run(rootEpic);
我尝试过的其他事情是将combineReducers
声明(来自rootReducer
import) 到同一个文件或将文件转换为纯 JavaScript,具有相同或相似的结果。由于某种原因,打字稿决定仍然在 javascript 文件上困扰我:)
代码仍然在运行,所以我很想就这样保留它,但我想摆脱它。
我遇到了同样的问题,这就是我的发现:
您需要包括Store
来自 redux,并将其用作您自己的类型定义store
返回值。简短回答:
import { Store } from 'redux';
[...]
const store:Store = configureStore([...])
[...]
export default store;
更长的答案:
据我了解,发生的事情是Store
类型用途$CombinedState
作为其定义的一部分。什么时候configureStore()
返回,它继承了State
类型。然而自从State
没有在您的代码中明确使用,这意味着您的代码包含一个引用的值$CombinedState
,尽管它也不存在于代码中的任何地方。然后,当您尝试将其导出到模块之外时,您导出的值的类型在模块中不存在,因此会收到错误。
您可以导入State
来自 redux (这又会明确地导致您的代码引入$CombinedState
),然后用它来显式定义store
被分配的返回值configureStore()
。然后您不应该再导出未知的命名类型。
您还可以更具体地说明您的Store
类型,因为它是通用的:
const store:Store<RootState>
尽管我不完全确定这是否是循环依赖,因为您的 RootState 取决于 store.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)