react中使用redux-persist做持久化储存

news/2024/10/22 3:01:08/

某天下午折腾着玩的 – 笔记

安装相关依赖

npm install @reduxjs/toolkit redux-persist redux react-redux
// store.jsx
import { configureStore, getDefaultMiddleware } from "@reduxjs/toolkit";
import { persistStore, persistReducer } from "redux-persist";
import storage from "redux-persist/lib/storage"; // 选择持久化存储引擎,如 localStorage 或 AsyncStorageimport rootReducer from "./reducers/index"; // 导入您的根 reducer// 配置持久化设置
const persistConfig = {key: "root", // 存储的键名storage, // 持久化存储引擎// 可选的配置项,如白名单、黑名单等 选其一就好了// blacklist:['test'], // 只有 test 不会被缓存// whitelist: ["test"], // 只有 test 会被缓存
};const persistedReducer = persistReducer(persistConfig, rootReducer);const store = configureStore({reducer: persistedReducer,middleware: getDefaultMiddleware({serializableCheck: false, // 禁用严格模式}),
});const persistor = persistStore(store);export { store, persistor };

将 store 提供给应用程序:将 Redux store 提供给根组件,以便在整个应用程序中可以访问到 Redux 状态

// main.jsx
import React from "react";
import ReactDOM from "react-dom/client";
import { Provider } from "react-redux";
import { PersistGate } from "redux-persist/integration/react";
import { store, persistor } from "./redux/store";
import App from "./App";ReactDOM.createRoot(document.getElementById("root")).render(<React.StrictMode><Provider store={store}><PersistGate loading={null} persistor={persistor}><App /></PersistGate></Provider></React.StrictMode>
);

reducer 示例:

// reducers/index.jsx
import { combineReducers } from "redux";
import userReducer from "./user";
import baseReducer from "./base";const rootReducer = combineReducers({user: userReducer,base: baseReducer,
});export default rootReducer;
// reducers/user.jsx
import { createSlice } from "@reduxjs/toolkit";const initialState = {token: "默认值token",isLogin: false,
};const user = createSlice({name: "user",initialState,reducers: {setToken: (state, action) => {// 将传入的值设置为 token 的新值state.token = action.payload;},},
});export const { setToken } = user.actions;
export default user.reducer;

在组件中使用

// App.jsx
import { useSelector, useDispatch } from "react-redux";
import { setToken } from "./redux/reducers/user";const App = () => {const user = useSelector((state) => state.user);// 在页面组件中使用 useDispatch 获取 dispatch 函数,用于派发 actionconst dispatch = useDispatch();const setTokenFun = () => {dispatch(setToken("一个新的token"));};return (<><p>token====={user.token}</p><Button type="primary" onClick={setAddressFun}>Set Token</Button></>);
};export default App;

http://www.ppmy.cn/news/1002085.html

相关文章

【大招:谨慎使用】如果Git上传,pull总是有冲突而且无法解决

目录 1.先去当前项目文件夹&#xff0c;拷贝一份项目作为备份。 2.右键运行Git Bash 3.把刚才备份的项目文件夹中&#xff0c;自己的代码&#xff0c;拷贝到覆盖后文件夹里&#xff0c;并替换。 4.打开idea&#xff0c;进到项目里。把代码重新push。按如下操作&#xff1a; …

使用 RSA 密钥进行 SSH 连接

使用 RSA 密钥进行 SSH 连接 平时用 SSH 连树莓派和虚拟机每次都要输入密码&#xff0c;比较烦人。Windows Terminal 出于安全原因是不支持记录密码进行自动连接的功能的&#xff0c;所以还是老老实实创建 RSA 密钥进行连接好了。 生成 RSA 密钥对 Windows 上可以用 Putty K…

Node.js-http模块服务端请求与响应操作,请求报文与响应报文

简单案例创建HTTP服务端&#xff1a; // 导入 http 模块 const http require("http"); // 创建服务对象 const server http.createServer((request, response) > {// 设置编码格式&#xff0c;解决中文乱码问题response.setHeader("content-type", &…

git config 常用命令

​ Git config是一个用于设置Git配置变量的命令&#xff0c;它可以控制Git的外观和行为1。Git config管理的常用命令有以下几种&#xff1a; git config --global user.email <email>&#xff1a;设置全局的邮箱地址&#xff0c;用于标识你的提交2。 git config --globa…

【CSDN竞赛第67期】Python正则匹配

文章目录 竞赛题目正则匹配代码实现 竞赛题目 正则匹配 给你一个字符串s和一个字符模式p&#xff0c;请你来原生实现一个支持 .和*的正则表达式匹配。点号表示匹配任意字符&#xff0c;星号表示匹配前一项字符零个或多个。必须匹配到整个字符串&#xff0c;才可视为匹配成功&a…

赶紧学起来,成为人生赢家很简单,只需这五个网站就能实现

在数字化时代&#xff0c;人们越来越重视个人技能的提升。 在这个过程中&#xff0c;有几个网站备受青睐。让我们赶紧使用起来&#xff0c;偷偷的弯道超车&#xff0c;提高自己的技术能力&#xff0c;悄悄的变现。 一、Coursera&#xff08;www.coursera.org&#xff09; 是一…

vue-webpack代码混淆、代码压缩设置

package.json "dependencies": {"webpack": "^4.41.3" // webpack版本"webpack-obfuscator": "^2.6.0" // 代码混淆版本"compression-webpack-plugin": "6.1.1", // 代码压缩版本 } webpack.config.p…

【第一阶段】kotlin语言的String模板

1.在Java中拼接字符串使用的是“” 2.在kotlin中使用"${}" 3.kotlin语言中if是表达式&#xff0c;更灵活 fun main() {val city"西安"val time24//java中写法println("我在"city"玩了"time"小时")//kotlin中写法&#xff0…