当前位置:   article > 正文

Redux持久化插件-解决刷新页面数据丢失问题_redux-persist使用持久化调用persiststore方法导致数据为空

redux-persist使用持久化调用persiststore方法导致数据为空

最近在使用react的时候有用到redux,对数据进行全局的状态管理,但是发现和vuex一样会出现刷新之后数据丢失的问题,于是在github上面查阅了 redux-persist 插件,使用redux-persist进行持久化数据存储 。

通常我们会使用sessionStorage或者localStorage来进行数据存储,但既然我们使用了redux来管理和存储全局数据,此时再使用sessionStorage或者localStorage存储,感觉会本末倒置,而且还增加了工作量。

这个时候 **redux-persist,**满足你的需求,它结合redux将store中的数据缓存到浏览器的sessionStorage或者localStorage中


 redux-persist持久化插件

1.安装

yarn add redux-persist --save

2.在store.js里面引入,存储到storageSession

3.入口文件index.js,将PersistGate标签作为父标签

  1. /*
  2. * @Author: chengxinyu
  3. * @Date: 2021-12-03 18:28:29
  4. * @LastEditors: chengxinyu
  5. * @LastEditTime: 2021-12-10 17:27:13
  6. */
  7. import { createStore } from 'redux';
  8. import reducer from './reducer';
  9. import { persistStore, persistReducer } from 'redux-persist';
  10. // 存储机制,可换成其他机制,当前使用sessionStorage机制
  11. import storageSession from 'redux-persist/lib/storage/session';
  12. // import storage from 'redux-persist/lib/storage'; //localStorage机制
  13. //import { AsyncStorage } from 'react-native'; //react-native
  14. // 数据对象
  15. const storageConfig = {
  16. key: 'root', // 必须有的
  17. storage: storageSession, // 缓存机制
  18. blacklist: [], // reducer 里不持久化的数据,除此外均为持久化数据
  19. };
  20. const myPersistReducer = persistReducer(storageConfig, reducer);
  21. const store = createStore(myPersistReducer);
  22. export const persistor = persistStore(store);
  23. export default store;
  24. // const configureStore = () => createStore(reducer);
  25. // export default configureStore;
  1. /*
  2. * @Author: chengxinyu
  3. * @Date: 2021-11-24 10:34:44
  4. * @LastEditors: chengxinyu
  5. * @LastEditTime: 2021-12-08 09:13:11
  6. */
  7. import React, { useState, useEffect } from 'react';
  8. import { Menu, HomeHeader } from '@/components';
  9. import './index.less';
  10. // 状态
  11. // import store from '@/store/index';
  12. import { useLocation } from 'umi';
  13. import { Provider } from 'react-redux';
  14. import store from '../store/index';
  15. import { PersistGate } from 'redux-persist/lib/integration/react';
  16. import configStore from '../store/index';
  17. import { persistor } from '../store/index';
  18. // 页面刷新本地仓库数据不消失
  19. function BasicLayout(props) {
  20. const location = useLocation();
  21. const paths = ['/login'];
  22. return (
  23. <Provider store={store}>
  24. <PersistGate loading={null} persistor={persistor}>
  25. <div className="lay">
  26. <div className="left_container">
  27. <Menu
  28. show={paths.includes(location.pathname)}
  29. pathname={location.pathname}
  30. ></Menu>
  31. </div>
  32. <div className="right_container">
  33. <HomeHeader
  34. show={paths.includes(location.pathname)}
  35. pathname={location.pathname}
  36. ></HomeHeader>
  37. {props.children}
  38. </div>
  39. </div>
  40. </PersistGate>
  41. </Provider>
  42. );
  43. }
  44. export default BasicLayout;

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/510805
推荐阅读
相关标签
  

闽ICP备14008679号