解决redux数据刷新页面数据丢失问题(使用redux-persist持久化数据存储)

说明:

  • 一般在react项目中,我们通过redux和react-redux来存储和管理数据,但是使用redux存储数据时,会有一个问题,如果用户刷新了页面,那么通过redux存储的全局数据就会被重置,比如登录状态等。
  • 这个时候有没有解决办法呢?答案肯定是有的:
  • 一般我们可以使用sessionStorage或者localStorage来达到数据存储的要求,但既然我们使用了redux来管理和存储全局数据,如果再使用sessionStorage或者localStorage来读写数据,这样就增大了工作量和代码冗余。
  • 这个时候,redux-persist
    满足你的需求,它结合redux,将store中的数据缓存到浏览器的sessionStorage或者localStorage中。
    redux-persist 使用如下:
    当前使用最新版本 redux-persist ^5.10.0
    1.在store.js里面
    import { createStore } from 'redux';
    import reducer from '../reducer';//引入deducer文件
    import {persistStore, persistReducer} from 'redux-persist';
    //  存储机制,可换成其他机制,当前使用sessionStorage机制
    import storageSession from 'redux-persist/lib/storage/session'
    // import storage from 'redux-persist/lib/storage'; //localStorage机制
    //import { AsyncStorage } from 'react-native'; //react-native
    // 数据对象
    const storageConfig = {
        key: 'root', // 必须有的
        storage:storageSession, // 缓存机制
        blacklist: ['name','age'] // reducer 里不持久化的数据,除此外均为持久化数据
    }
    或者
    const storageConfig = {
        key: 'root', // 必须有的
        storage:storageSession, // 缓存机制
        whitelist: ['name','age'] // reducer 里持久化的数据,除此外均为不持久化数据
    }
    const myPersistReducer = persistReducer(storageConfig, reducer)
    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 Router from './router';
import {Provider} from 'react-redux';
import {PersistGate} from 'redux-persist/lib/integration/react';
import configStore from './redux/store';
import {persistor} from './redux/store';

ReactDOM.render(
    <Provider store={configStore}>
        <PersistGate loading={null} persistor={persistor}>
            <Router/>
        </PersistGate>
    </Provider>,
    document.getElementById('root'));

这就完成了通过redux-persist实现redux持久化本地数据存储。

3.接下来打开浏览器调试工具,查看浏览器的缓存,就可以看到缓存的数据。
在这里插入图片描述
此时再刷新页面,你就会发现数据还在。
已上是全部内容,希望我的理解能给你带来帮助,如有错误或不足之处,欢迎指正,谢谢!
参考:https://segmentfault.com/a/1190000018150177

  • 4
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
要实现Redux Toolkit的数据持久,你可以使用一些库或中间件来帮助你完成这个任务。下面是一种常用的方法: 1. 使用redux-persist库:redux-persist是一个用于在Redux中实现数据持久的库。它提供了一个简单的方法来将Redux状态保存到本地存储(如LocalStorage或AsyncStorage)中,并在应用程序重新加载时还原状态。 首先,安装redux-persist库: ``` npm install redux-persist ``` 然后,在你的Redux store配置中,使用`persistStore`函数来创建持久的store: ```javascript import { configureStore } from '@reduxjs/toolkit'; import { persistStore, persistReducer } from 'redux-persist'; import storage from 'redux-persist/lib/storage'; // 默认使用LocalStorage import rootReducer from './reducers'; const persistConfig = { key: 'root', storage, }; const persistedReducer = persistReducer(persistConfig, rootReducer); export const store = configureStore({ reducer: persistedReducer, }); export const persistor = persistStore(store); ``` 这里,`persistConfig`对象用于配置持久设置。你可以指定一个键(key)和存储引擎(storage),它默认使用LocalStorage。然后,使用`persistReducer`函数将根reducer与配置一起包装,创建一个持久的reducer。 最后,通过调用`persistStore`函数来创建一个持久的store,并导出store和persistor。 2. 在根组件中使用`PersistGate`组件:`PersistGate`是redux-persist提供的一个React组件,用于在应用程序加载时等待持久恢复完成。在根组件中使用`PersistGate`包裹你的应用程序组件,并传入`persistor`作为prop。 ```javascript import { PersistGate } from 'redux-persist/integration/react'; import { persistor } from './store'; ReactDOM.render( <Provider store={store}> <PersistGate loading={null} persistor={persistor}> <App /> </PersistGate> </Provider>, document.getElementById('root') ); ``` 这样,当你的应用程序重新加载时,Redux状态将从本地存储中恢复。 请注意,这只是一种实现Redux Toolkit数据持久的方法之一,你也可以使用其他类似的库或中间件来实现类似的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值