Redux持久化插件-解决刷新页面数据丢失问题

2023-11-17

最近在使用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标签作为父标签

/*
 * @Author: chengxinyu
 * @Date: 2021-12-03 18:28:29
 * @LastEditors: chengxinyu
 * @LastEditTime: 2021-12-10 17:27:13
 */

import { createStore } from 'redux';
import reducer from './reducer';
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: [], // reducer 里不持久化的数据,除此外均为持久化数据
};

const myPersistReducer = persistReducer(storageConfig, reducer);
const store = createStore(myPersistReducer);
export const persistor = persistStore(store);
export default store;

// const configureStore = () => createStore(reducer);
// export default configureStore;
/*
 * @Author: chengxinyu
 * @Date: 2021-11-24 10:34:44
 * @LastEditors: chengxinyu
 * @LastEditTime: 2021-12-08 09:13:11
 */

import React, { useState, useEffect } from 'react';
import { Menu, HomeHeader } from '@/components';
import './index.less';
// 状态
// import store from '@/store/index';
import { useLocation } from 'umi';
import { Provider } from 'react-redux';
import store from '../store/index';
import { PersistGate } from 'redux-persist/lib/integration/react';
import configStore from '../store/index';
import { persistor } from '../store/index';
// 页面刷新本地仓库数据不消失

function BasicLayout(props) {
  const location = useLocation();
  const paths = ['/login'];

  return (
    <Provider store={store}>
      <PersistGate loading={null} persistor={persistor}>
        <div className="lay">
          <div className="left_container">
            <Menu
              show={paths.includes(location.pathname)}
              pathname={location.pathname}
            ></Menu>
          </div>

          <div className="right_container">
            <HomeHeader
              show={paths.includes(location.pathname)}
              pathname={location.pathname}
            ></HomeHeader>
            {props.children}
          </div>
        </div>
      </PersistGate>
    </Provider>
  );
}

export default BasicLayout;

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Redux持久化插件-解决刷新页面数据丢失问题 的相关文章

随机推荐

  • 每日刷题-6

    目录 一 选择题 二 算法题 1 Fibonacci数列 2 合法括号序列判断 一 选择题 1 解析 内联函数是一种可以提高函数执行效率的方法 它的原理是编译时在函数调用点直接展开函数体的代码 从而避免了函数调用的开销 但是 内联函数也有一
  • 单链表排序操作

    单链表排序操作 单链表是常见的一种数据结构 它由一系列节点组成 每个节点包含一个数据元素和一个指向下一个节点的指针 在实际开发中 我们经常需要对单链表进行排序操作 以满足不同的需求 在进行单链表的排序操作时 我们可以采用多种方法 下面将介绍
  • 10个值得前端收藏的CSS3动效库(工具)

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 现在的网站和App的设计中越来越重视用户体验 而优秀的动效则能使你的应用更具交互性 从而吸引更多用户的使用 我一般会在网站中加入一些简单而一致的动效 我所用的技术则是用SA
  • Python 3.打开摄像头,保存AVI视频 OpenCV Linux

    import cv2 import numpy as np from matplotlib import pylab as plt img cv2 imread pic1 png 2 plt imshow img cmap gray int
  • C练题笔记之:Leetcode-565. 数组嵌套

    题目 索引从0开始长度为N的数组A 包含0到N 1的所有整数 找到最大的集合S并返回其大小 其中 S i A i A A i A A A i 且遵守以下的规则 假设选择索引为i的元素A i 为S的第一个元素 S的下一个元素应该是A A i
  • 栈的 创建,入栈,出栈,清空栈,遍历栈 的实现

    数据结构 的学习视频 https www bilibili com video av6159200 from search seid 6709590585276522157 一 算法 栈 数据进出 类向箱子放东西和拿东西 先进后出 或者说后
  • OpenGL Vertex Buffer Objects(VBOs)

    OpenGL Vertex Buffer Objects VBOs 分类 OpenGL2010 05 20 12 53 3714人阅读 评论 13 收藏 举报 buffer float list struct 存储 工作 原创文章转载请注明
  • python 异常之 ValueError: invalid literal for int() with base 10: ‘xxx‘

    文章目录 1 异常例子 2 源代码 3 int x base 的正确使用方法 1 异常例子 代码 if name main print int 123 print int aaa 执行代码 2 源代码 可以看到 在执行 print int
  • LINUX 防火墙iptables常用指令

    封单个IP的命令 iptables I INPUT s 124 115 0 199 j DROP 封IP段的命令 iptables I INPUT s 124 115 0 0 16 j DROP 封整个段的命令 iptables I INP
  • “字符串的展开”【题解】

    字符串的展开 的题目 题目 题目描述 在初赛普及组的 阅读程序写结果 的问题中 我们曾给出一个字符串展开的例子 如果在输入的字符串中 含有类似于 d h 或者 4 8 的字串 我们就把它当作一种简写 输出时 用连续递增的字母或数字串替代其中
  • golang 读取yaml配置文件中的数据 两种方式:yaml.v2 和 Viper

    golang 读取yaml配置文件中的数据 yaml 配置文件 config yaml 中 写数据 app host 127 0 0 1 port 3306 username admin password admin log suffix
  • 110. 平衡二叉树

    给定一个二叉树 判断它是否是高度平衡的二叉树 本题中 一棵高度平衡二叉树定义为 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 Definition for a binary tree node public class Tr
  • VScode设置字体大小

    VScode如何设置字体大小 第一步 首先打开vscode 在vscode的左下角有一个设置按钮 单机打开 选择settings选项 第二步 在设置中查找font 字体 选项 并打开 第三步 在font选项内 选择font size 就可以
  • jQuery验证码插件:jquery.idycode.js

    对于任何一个又评论功能的网站来说 验证码都是重中之重 没有验证码的话 用户就可以肆意刷评论 甚至是通过一些工具来操作 会对网络环境产生极大的危害 验证码这个词最早是在2002年由卡内基梅隆大学的路易斯 冯 安 Manuel Blum Nic
  • 标识符和关键字应该如何理解?

    思考 为什么语言中需要关键字和表示符 程序来源于生活 想想我们人类在生产生活过程中的一些语言使用都有其特定的含义 而每个事物或者事物的一些属性功能也都需要给予特定的语言符号来表示 故java语言的发明者们按照人类的方式创造除了一门值得大家学
  • 分布式、微服务概念

    目录 1 目前软件架构大致分类 2 各种架构技术方法 3 什么是微服务 4 微服务架构特点 5 什么是SOA 6 SOA架构特点 7 SOA架构和微服务架构的区别 8 ESB和微服务API网关 9 什么是分布式 10 什么是集群 11 负载
  • R语言使用cumsum函数计算向量数据的累加和(cumulative sum )

    R语言使用cumsum函数计算向量数据的累加和 cumulative sum 目录 R语言使用cumsum函数计算向量数据的累加和 cumulative sum
  • glsl version 300es 关键字

    参考链接 GLSL ES Specification 3 00 变量名 不能要以gl 开头 注释 或 关键字 void float int uint bool void function name float var name 1 uint
  • JS混淆技术探究及解密方法分析

    随着Web技术的快速发展 JavaScript被广泛应用于网页开发 移动应用开发等领域 然而 JavaScript代码很容易被反编译 解密 这给保护网站和应用程序的安全性带来了严重的挑战 为了解决这个问题 JS混淆技术应运而生 JS混淆就是
  • Redux持久化插件-解决刷新页面数据丢失问题

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