广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >vuex刷新之后数据丢失,数据持久化,vuex-persistedstate问题
  • 331
分享到

vuex刷新之后数据丢失,数据持久化,vuex-persistedstate问题

2024-04-02 19:04:59 331人浏览 泡泡鱼
摘要

目录为什么刷新之后Vuex的状态就没了?常见的解决方案完美方案是利用sessionStorage/localStorage主要是针对mutations和getters如何让vuex数

为什么刷新之后vuex的状态就没了?

原因是刷新之后js初始化,vuex重新初始化了;

常见的解决方案

1,mounted里面调接口重新给state赋值,太麻烦,pass

2,watch里面监听state,再赋值,也很low

vuex理解不透彻的可以先看看 

完美方案是利用sessionStorage/localStorage

做一个暂时的储存

store的模块化结构

在这里插入图片描述

主要是针对mutations和getters

做一个简单的赋值和取值封装

mutations.js改变state的同时在本地做一个备份

const setStorage = (key, value) => {
  if (typeof (value) === 'object') {
    value = JSON.stringify(value)
  }
  sessionStorage.setItem(key, value)
}

const mutations = {
  set_userInfo (state, payload) {
    state.userInfo = payload
    setStorage('userInfo', payload)
  },
  set_token (state, payload) {
    state.token = payload
    setStorage('token', payload)
  },
  set_roles (state, payload) {
    state.roles = payload
    setStorage('roles', payload)
  },
  set_breadcrumb (state, payload) {
    state.breadcrumb = payload
    setStorage('breadcrumb', payload)
  }
}
export default mutations

getters.js 取值时默认从state里面取,没有就从本地拿

import createdRoutes from '@/utils/createdRoutes.js'
import { asyncRoutes } from '@/router/index.js'
let getStoryage = (item) => {
  let str = sessionStorage.getItem(item)
  return JSON.parse(str)
}
const getters = {
  get_userInfo: (state) => {
    return state.userInfo ? state.userInfo : getStoryage('userInfo')
  },
  get_token: (state) => {
    return state.token ? state.token : sessionStorage.getItem('token')
  },
 get_roles: (state) => {
    return state.roles.length ? state.roles : getStoryage('roles')
  },
  addRouters: (state, getters) => {
    let routes = createdRoutes(asyncRoutes, getters.get_roles)
    return routes
  },
  get_breadcrumb: (state, getters) => {
    return state.breadcrumb.length ? state.breadcrumb : getStoryage('getStoryage')
  }
}
export default getters;

在页面vue文件直接用mapGetters获取状态值

这样一来就算state被清空了,还可以在本地储存里面获取状态值

后记:

本来想写一个插件完成上面的事,结果发现一个已经写好的 vuex-persistedstate

用法:

import state from './state.js'
import getters from './getters.js'
import mutations from './mutations.js'
import actions from './actions.js'
import Vuex from 'vuex'
import Vue from 'vue'
import { deepCopy } from '@/utils/util'
import createPersistedState from "vuex-persistedstate"
Vue.use(Vuex)
let store = new Vuex.Store({
  strict: process.env.node_ENV !== 'production',
  state,
  getters,
  mutations,
  actions,
  plugins: [createPersistedState({
    storage: window.sessionStorage,
    reducer (state) {
      let _state = deepCopy(state) // 深拷贝一份 删除不想保存的
      delete _state.hasLogin
      delete _state.ziYuanLaiYuan
      delete _state.orderStatus
      delete _state.taxPersonType
      return _state
    }
  })]
})
export default store

深拷贝


```bash

export const deepCopy = (obj) => {
  // 根据obj的类型判断是新建一个数组还是一个对象
  let newObj = obj instanceof Array ? [] : {};
  for (let key in obj) {
    // 判断属性值的类型,如果是对象递归调用深拷贝
    newObj[key] = typeof obj[key] === 'object' ? deepCopy(obj[key]) : obj[key];
  }
  return newObj;
}

如何让vuex数据持久化

为什么要让vuex数据持久化

在使用vuex的时候,会发现刷新页面之后state中存储的数据会被重置,因为刷新浏览器的时候会导致整个页面重新加载,vuex的state也会全部重新加载,所以为了防止这类情况的发生,我们会将vuex中的数据进行本地存储,防止页面刷新丢失vuex中的数据。

如何将vuex中的数据持久化

1.我们需要安装一个插件,我们需要借助这个vuex-persistedstate插件进行持久化

// 安装依赖包
npm install vuex-persistedstate  --save

2.使用vuex-persistedstate插件来进行持久化

  • key是存储数据的键名(本地存储)
  • paths是state中那些需要被的数据,如果是模块下的数据,则在前面加上模块名称
  • plugins要的是一个一维数组不然会解析错误
import createPersistedState from 'vuex-persistedstate'
 
const store = new Vuex.Store({
  // ...
  plugins: [
    createPersistedState({
    key: 'stort',
     可以写多个
    paths: ['userinfo', ......]
      })
  ]
})

3.指定需要持久化的数据

import createPersistedState from "vuex-persistedstate"
const store = new Vuex.Store({
 // ...
 plugins: [createPersistedState({
  storage: window.sessionStorage,
  reducer(val) {
   return {
   // 只储存state中的asseSSMentData
   assessmentData: val.assessmentData
  }
  }
 })]

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。 

--结束END--

本文标题: vuex刷新之后数据丢失,数据持久化,vuex-persistedstate问题

本文链接: https://www.lsjlt.com/news/144420.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • vuex刷新之后数据丢失,数据持久化,vuex-persistedstate问题
    目录为什么刷新之后vuex的状态就没了?常见的解决方案完美方案是利用sessionStorage/localStorage主要是针对mutations和getters如何让vuex数...
    99+
    2022-11-13
  • vuex中数据持久化插件vuex-persistedstate怎么用
    小编给大家分享一下vuex中数据持久化插件vuex-persistedstate怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!数据持久化vuex-persi...
    99+
    2023-06-29
  • vuex中数据持久化插件vuex-persistedstate使用详解
    目录数据持久化vuex-persistedstate使用安装起步配置使用自定义存储方式想使用cookie同理使用vuex-persistedstate插件遇到的问题数据持久化vuex...
    99+
    2022-11-13
  • vuex持久化插件如何解决浏览器刷新数据消失问题
    小编给大家分享一下vuex持久化插件如何解决浏览器刷新数据消失问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!插件原理vuex...
    99+
    2022-10-19
  • 关于vuex强刷数据丢失问题解析
    vuex-persistedstate 核心原理:在本地存储中存入所有的vuex数据,页面刷新时到缓存中取数据,放到vuex中 下载:$ npm install ...
    99+
    2022-11-12
  • 解决vuex数据丢失问题
    目录数据丢失的原因方法1:使用第三方库 vuex-persistedstate01 store / index.js 之 localStorage02 store / index.j...
    99+
    2023-02-02
    vuex 数据丢失
  • 解决vue页面刷新vuex中state数据丢失的问题
    页面刷新后,原有的 vuex 中的 state 会发生改变,如果在页面刷新之前,可以将 state 信息保存,页面重新加载时,再将该值赋给 state,那么该问题即可解决。 1、lo...
    99+
    2022-11-13
  • vuex结合session存储数据解决页面刷新数据丢失问题
    目录前言一、原因:二、解决思路:1.本地存储方法:2.实现步骤:3.优化:前言 在项目中表单筛选项里,选择完之后刷新页面数据就变了,没有保留在自己选择的选项上。 在项目中是使用vue...
    99+
    2022-11-12
  • vuex页面刷新数据丢失问题的四种解决方式
    目录为什么说刷新页面vuex的数据会丢失第一种方法用sessionStorage第二种方法是 vuex-along示例如下第三种方法是 vuex-persistedstate示例如下...
    99+
    2022-11-13
  • vuex页面刷新数据丢失怎么解决
    今天小编给大家分享一下vuex页面刷新数据丢失怎么解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。为什么说刷新页面vuex...
    99+
    2023-06-29
  • 关于vuex强刷数据丢失问题的解决方法
    这篇文章主要讲解了“关于vuex强刷数据丢失问题的解决方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“关于vuex强刷数据丢失问题的解决方法”吧!vuex-persistedstate核心...
    99+
    2023-06-14
  • 如何解决页面刷新vuex数据消失的问题
    这篇文章主要为大家展示了“如何解决页面刷新vuex数据消失的问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何解决页面刷新vuex数据消失的问题”这篇文章吧...
    99+
    2022-10-19
  • 如何使用sessionStorage解决vuex在页面刷新后数据被清除的问题
    这篇文章主要介绍如何使用sessionStorage解决vuex在页面刷新后数据被清除的问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1.原因2.解决方法localStorage...
    99+
    2022-10-19
  • 如何解决刷新页面vuex数据不消失和不跳转页面的问题
    小编给大家分享一下如何解决刷新页面vuex数据不消失和不跳转页面的问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!先说点什么v...
    99+
    2022-10-19
  • 关于vuex状态刷新网页时数据被清空问题及解决
    目录vuex状态刷新网页时数据被清空问题vuex状态在页面刷新时,会清空状态的解决vuex状态刷新网页时数据被清空问题 vuex状态管理,在网页刷新数据被清空的解决方法。 在main...
    99+
    2022-11-13
  • vue路由传参之使用query传参页面刷新数据丢失问题解析
    目录vue路由传参(使用query传参页面刷新数据丢失问题)1. 路由传参的两种方式1. params传参(刷新页面数据会丢失)2. query传参(刷新数据不会丢失)2. 使用qu...
    99+
    2023-05-15
    vue路由传参 query传参页面刷新数据丢失 vue路由传参params和query
  • Vue怎么解决router传递params参数在页面刷新时数据丢失问题
    本文小编为大家详细介绍“Vue怎么解决router传递params参数在页面刷新时数据丢失问题”,内容详细,步骤清晰,细节处理妥当,希望这篇“Vue怎么解决router传递params参数在页面刷新时数据丢...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作