在React项目中,我们经常会通过redux以及react-redux来存储和管理全局数据。但是通过redux存储全局数据时,会有这么一个问题,如果用户刷新了网页,那么我们通过redux存储的全局数据就会被全部清空,比如登录信息等。
这个时候,我们就会有全局数据持久化存储的需求。首先我们想到的就是localStorage,localStorage是没有时间的数据存储,我们可以通过它来实现数据的持久化存储。
但是在我们已经使用redux来管理和存储全局数据的基础上,再去使用localStorage来读写数据,这样不仅是工作量巨大,还容易出错。那么有没有结合redux来达到持久数据存储功能的框架呢?当然,它就是redux-persist。redux-persist会将redux的store中的数据缓存到浏览器的localStorage中。
redux-persist的使用
1、对于reducer和action的处理不变,只需修改store的生成代码,修改如下
import {createStore} from 'redux'
import reducers from '../reducers/index'
import {persistStore, persistReducer} from 'redux-persist';
import storage from 'redux-persist/lib/storage';
import autoMergeLevel2 from 'redux-persist/lib/stateReconciler/autoMergeLevel2';
const persistConfig = {
key: 'root',
storage: storage,
stateReconciler: autoMergeLevel2 // 查看 'Merge Process' 部分的具体情况
};
const myPersistReducer = persistReducer(persistConfig, reducers)
const store = createStore(myPersistReducer)
export const persistor = persistStore(store)
export default store
2、在index.js中,将PersistGate标签作为网页内容的父标签
import React from 'react';
import ReactDOM from 'react-dom';
import {Provider} from 'react-redux'
import store from './redux/store/store'
import {persistor} from './redux/store/store'
import {PersistGate} from 'redux-persist/lib/integration/react';
ReactDOM.render(<Provider store={store}>
<PersistGate loading={null} persistor={persistor}>
{/*网页内容*/}
</PersistGate>
</Provider>, document.getElementById('root'));
这就完成了通过redux-persist实现React持久化本地数据存储的简单应用
3、最后我们调试查看浏览器中的localStorage缓存数据
发现数据已经存储到了localStorage中,此时刷新网页,redux中的数据也不会丢失
浩特汽车网还为您提供以下相关内容希望对您有帮助:
比较了不同方式下的本地存储方法
例如,使用localStorage.setItem('key', 'value')保存数据,localStorage.getItem('key')获取数据,localStorage.removeItem('key')删除数据。这种方式无需依赖外部库,适合简单场景。而React等框架通常需要引入第三方包(如react-localstorage),通过自定义Hook
MBBroadcast Mobile 总结
redux-observable:通过创建epics中间件,为每一个dispatch添加附加效果,无需修改reducer,保持了reducer的纯函数形态,同时利用RxJs的API控制异步流程。redux-persist:用于持久化数据,当store有变化时自动保存整个store,应用初始化时自动恢复数据,支持多种持久化引擎和数据加密压缩插件。date-fns:替代了性能...
为什么要用 redux-persist
redux的store状态树保存的state并不是持久保存的,state只是一个内存机制,而我们知道,本地数据库或者像localstorage之类的缓存系统才有可能长时间保存数据,而redux-persist可以让你的数据从state分离出来,保存到浏览器缓存中,以便实现数据的持久化缓存。既然如此,那么我们手动保存到浏览器缓存就行了,不是...
百度问一问
5. React的HooksHooks是React 16.8引入的特性,允许在不编写类组件的情况下使用状态和其他React特性。常见Hooks包括:useState:管理组件状态。useEffect:处理副作用(如数据获取、订阅)。useContext:访问全局上下文。useReducer:类似Redux的状态管理。useRef:获取DOM引用或持久化值。6. React如何避免组件重新...
前端缓存存到哪里
一、浏览器端缓存(前端主要缓存场景)1. HTTP缓存(强缓存+协商缓存)• 存储位置:浏览器内存(Memory Cache)或硬盘(Disk Cache)• 说明:• Memory Cache:临时存储,关闭标签页或浏览器后可能丢失,加载速度快• Disk Cache:持久化存储,重启浏览器后仍存在,需通过HTTP...
40个web前端练手项目列表,偷偷练习卷死他们,得不到的永远在骚动
管理后台类React项目管理后台系统实现用户权限管理、数据可视化(如ECharts图表)、表单验证等企业级功能。简书后台管理系统模拟内容管理平台,包含文章发布、审核、分类管理等功能,需掌握状态管理(如Redux)。NodeJS+Express+MongoDB实战从零搭建后端服务,实现用户注册登录、数据存储与API接口开发,适合全栈练习...