reactjs - 如何使用带有 redux-persist 的反应工具包清除任何持久状态
问题描述
在官方文档中,它说要添加一个额外的 reducer 来清除当前切片的状态,但是到处都没有一个明确的例子
import { PURGE } from "redux-persist";
extraReducers: (builder) => {
builder.addCase(PURGE, (state) => {
customEntityAdapter.removeAll(state);
});
}
如何导入或从哪里得到customEntityAdapter,当我调用persistorObject
then purge 时它显示错误,任何人都可以给我一些启示,谢谢我感谢带有https://redux-toolkit.js.org的 redux-toolkit 的清晰示例/usage/usage-guide#use-with-redux-persist
解决方案
customEntityAdapter
,根据它的名字,应该是由createEntityAdapter创建的。
生成一组用于执行 CRUD 操作的预构建化简器和选择器的函数
使用与否与使用无关redux-persist
。由于您的问题是关于如何使用 RTK 和redux-persist
,以及它的清除状态功能,为了简化问题,我不会使用createEntityAdapter
.
关于如何使用 RTKredux-persist
和.purge()
方法的示例persistor
。
App.tsx
:
import "./styles.css";
import { persistor } from "./store";
export default function App() {
return (
<div className="App">
<h1>Hello CodeSandbox</h1>
<h2>Start editing to see some magic happen!</h2>
<button
onClick={() => {
persistor.purge();
}}
>
purge state
</button>
</div>
);
}
reducers.ts
:
import { combineReducers } from "@reduxjs/toolkit";
const rootReducer = combineReducers({
user: (state = { name: "teresa teng" }, action) => state
});
export default rootReducer;
store.ts
:
import { configureStore } from "@reduxjs/toolkit";
import {
persistStore,
persistReducer,
FLUSH,
REHYDRATE,
PAUSE,
PERSIST,
PURGE,
REGISTER
} from "redux-persist";
import storage from "redux-persist/lib/storage";
import rootReducer from "./reducers";
const persistConfig = {
key: "root",
version: 1,
storage
};
const persistedReducer = persistReducer(persistConfig, rootReducer);
const store = configureStore({
reducer: persistedReducer,
middleware: (getDefaultMiddleware) =>
getDefaultMiddleware({
serializableCheck: {
ignoredActions: [FLUSH, REHYDRATE, PAUSE, PERSIST, PURGE, REGISTER]
}
})
});
let persistor = persistStore(store);
export { store, persistor };
index.tsx
:
import { render } from "react-dom";
import { Provider } from "react-redux";
import { PersistGate } from "redux-persist/integration/react";
import { store, persistor } from "./store";
import App from "./App";
const rootElement = document.getElementById("root");
render(
<Provider store={store}>
<PersistGate loading={null} persistor={persistor}>
<App />
</PersistGate>
</Provider>,
rootElement
);
状态保留在默认存储引擎中 - localStorage
:
您可以单击按钮,从 中清除状态localStorage
。
推荐阅读
- java - Java中引用变量的枚举
- r - 单细胞实验。为什么我在单细胞实验中没有成功更改行名和列名?
- javascript - 如何从 Cloud Firestore 数据库中检索所有文档(包含图像 url 和名称)到网站?
- python - 如何在没有空格的文本列中查找所有文本
- excel - 获取“运行时错误'1004':范围类的选择方法失败”
- c++ - 为什么 moc 错误不是由纯方法引起的?
- cakephp - CakePHP 3.x 关于订单的 case 语句
- java - java.io.FileNotFoundException:打开失败:EISDIR(是一个目录)
- python - 输入在 VS Code 中可用?
- server - 带有 BI 应用程序的服务器每天在固定时间停机