最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vuex刷新之后數(shù)據(jù)丟失,數(shù)據(jù)持久化,vuex-persistedstate問(wèn)題

 更新時(shí)間:2022年03月30日 10:53:48   作者:秋刀魚(yú)笛滋味  
這篇文章主要介紹了vuex刷新之后數(shù)據(jù)丟失,數(shù)據(jù)持久化,vuex-persistedstate問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

為什么刷新之后vuex的狀態(tài)就沒(méi)了?

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

常見(jiàn)的解決方案

1,mounted里面調(diào)接口重新給state賦值,太麻煩,pass

2,watch里面監(jiān)聽(tīng)state,再賦值,也很low

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

完美方案是利用sessionStorage/localStorage

做一個(gè)暫時(shí)的儲(chǔ)存

store的模塊化結(jié)構(gòu)

在這里插入圖片描述

主要是針對(duì)mutations和getters

做一個(gè)簡(jiǎn)單的賦值和取值封裝

mutations.js改變state的同時(shí)在本地做一個(gè)備份

const setStorage = (key, value) => {
  if (typeof (value) === 'object') {
    value = JSON.stringify(value)
  }
  sessionStorage.setItem(key, value)
}
/*
* 避免刷新之后vuex被重置,在sessionStorage做一個(gè)備份
 */
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 取值時(shí)默認(rèn)從state里面取,沒(méi)有就從本地拿

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;

在頁(yè)面vue文件直接用mapGetters獲取狀態(tài)值

這樣一來(lái)就算state被清空了,還可以在本地儲(chǔ)存里面獲取狀態(tài)值

后記:

本來(lái)想寫(xiě)一個(gè)插件完成上面的事,結(jié)果發(fā)現(xiàn)一個(gè)已經(jīng)寫(xiě)好的 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
/**
 * 深拷貝
 * @param {Array,Object} obj
 */
export const deepCopy = (obj) => {
  // 根據(jù)obj的類型判斷是新建一個(gè)數(shù)組還是一個(gè)對(duì)象
  let newObj = obj instanceof Array ? [] : {};
  for (let key in obj) {
    // 判斷屬性值的類型,如果是對(duì)象遞歸調(diào)用深拷貝
    newObj[key] = typeof obj[key] === 'object' ? deepCopy(obj[key]) : obj[key];
  }
  return newObj;
}

如何讓vuex數(shù)據(jù)持久化

為什么要讓vuex數(shù)據(jù)持久化

在使用vuex的時(shí)候,會(huì)發(fā)現(xiàn)刷新頁(yè)面之后state中存儲(chǔ)的數(shù)據(jù)會(huì)被重置,因?yàn)樗⑿聻g覽器的時(shí)候會(huì)導(dǎo)致整個(gè)頁(yè)面重新加載,vuex的state也會(huì)全部重新加載,所以為了防止這類情況的發(fā)生,我們會(huì)將vuex中的數(shù)據(jù)進(jìn)行本地存儲(chǔ),防止頁(yè)面刷新丟失vuex中的數(shù)據(jù)。

如何將vuex中的數(shù)據(jù)持久化

1.我們需要安裝一個(gè)插件,我們需要借助這個(gè)vuex-persistedstate插件進(jìn)行持久化

// 安裝依賴包
npm install vuex-persistedstate ?--save

2.使用vuex-persistedstate插件來(lái)進(jìn)行持久化

  • key是存儲(chǔ)數(shù)據(jù)的鍵名(本地存儲(chǔ))
  • paths是state中那些需要被的數(shù)據(jù),如果是模塊下的數(shù)據(jù),則在前面加上模塊名稱
  • plugins要的是一個(gè)一維數(shù)組不然會(huì)解析錯(cuò)誤
import createPersistedState from 'vuex-persistedstate'
?
const store = new Vuex.Store({
? // ...
? plugins: [
? ? createPersistedState({
? ? key: 'stort',
? ? ?可以寫(xiě)多個(gè)
? ? paths: ['userinfo', ......]
? ?? ?})
? ]
})

3.指定需要持久化的數(shù)據(jù)

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

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。 

相關(guān)文章

  • Vue如何進(jìn)行數(shù)據(jù)代理

    Vue如何進(jìn)行數(shù)據(jù)代理

    這篇文章主要介紹了vue如何進(jìn)行數(shù)據(jù)代理,通過(guò)本文學(xué)習(xí)我們了解如何代理的及驗(yàn)證兩條線的問(wèn)題,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-10-10
  • 解決在vue項(xiàng)目中,發(fā)版之后,背景圖片報(bào)錯(cuò),路徑不對(duì)的問(wèn)題

    解決在vue項(xiàng)目中,發(fā)版之后,背景圖片報(bào)錯(cuò),路徑不對(duì)的問(wèn)題

    下面小編就為大家分享一篇解決在vue項(xiàng)目中,發(fā)版之后,背景圖片報(bào)錯(cuò),路徑不對(duì)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-03-03
  • vue-router history模式服務(wù)器端配置過(guò)程記錄

    vue-router history模式服務(wù)器端配置過(guò)程記錄

    vue路由有hash和history兩種模式,這篇文章主要給大家介紹了關(guān)于vue-router history模式服務(wù)器端配置的相關(guān)資料,需要的朋友可以參考下
    2021-06-06
  • vue3.0使用vue-pdf-embed在線預(yù)覽pdf 控制頁(yè)碼顯示范圍不生效問(wèn)題解決

    vue3.0使用vue-pdf-embed在線預(yù)覽pdf 控制頁(yè)碼顯示范圍不生效問(wèn)題解決

    這篇文章主要介紹了vue3.0使用vue-pdf-embed在線預(yù)覽pdf 控制頁(yè)碼顯示范圍不生效問(wèn)題的問(wèn)題及解決方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2023-01-01
  • Vue路由跳轉(zhuǎn)傳參或打開(kāi)新頁(yè)面跳轉(zhuǎn)的方法總結(jié)

    Vue路由跳轉(zhuǎn)傳參或打開(kāi)新頁(yè)面跳轉(zhuǎn)的方法總結(jié)

    這篇文章主要給大家介紹了關(guān)于Vue路由跳轉(zhuǎn)傳參或打開(kāi)新頁(yè)面跳轉(zhuǎn)的相關(guān)資料,在使用Vue.js開(kāi)發(fā)單頁(yè)面應(yīng)用時(shí)常常會(huì)遇到路由跳轉(zhuǎn)傳參的需求,需要的朋友可以參考下
    2023-07-07
  • vue數(shù)字金額動(dòng)態(tài)變化功能實(shí)現(xiàn)方法詳解

    vue數(shù)字金額動(dòng)態(tài)變化功能實(shí)現(xiàn)方法詳解

    這篇文章主要介紹了vue實(shí)現(xiàn)數(shù)字金額動(dòng)態(tài)變化效果,數(shù)字動(dòng)態(tài)變化是我們?cè)谇岸碎_(kāi)發(fā)中經(jīng)常需要做的效果,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2022-09-09
  • Vue+Element自定義縱向表格表頭教程

    Vue+Element自定義縱向表格表頭教程

    這篇文章主要介紹了Vue+Element自定義縱向表格表頭教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-10-10
  • vue如何通過(guò)ref調(diào)用router-view子組件的方法

    vue如何通過(guò)ref調(diào)用router-view子組件的方法

    這篇文章主要介紹了vue?通過(guò)ref調(diào)用router-view子組件的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2023-11-11
  • vue3將頁(yè)面生成pdf導(dǎo)出的操作指南

    vue3將頁(yè)面生成pdf導(dǎo)出的操作指南

    最近工作中有需要將一些前端頁(yè)面(如報(bào)表頁(yè)面等)導(dǎo)出為pdf的需求,下面這篇文章主要給大家介紹了關(guān)于vue3 如何將頁(yè)面生成 pdf 導(dǎo)出,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • 一文詳解WebStorm如何調(diào)試Vue項(xiàng)目

    一文詳解WebStorm如何調(diào)試Vue項(xiàng)目

    這篇文章主要介紹了如何使用WebStorm進(jìn)行斷點(diǎn)調(diào)試,包括配置、啟動(dòng)本地應(yīng)用程序、設(shè)置斷點(diǎn)以及使用調(diào)試工具等步驟,文中通過(guò)圖文及代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-02-02

最新評(píng)論

金沙县| 瑞丽市| 岱山县| 奈曼旗| 鄂尔多斯市| 绩溪县| 玛曲县| 新巴尔虎左旗| 曲沃县| 江达县| 土默特右旗| 平谷区| 松桃| 五原县| 抚远县| 应城市| 泽普县| 普陀区| 荥阳市| 黄浦区| 莱芜市| 武山县| 和龙市| 黄大仙区| 石景山区| 绥滨县| 开阳县| 西峡县| 东光县| 海原县| 合川市| 新建县| 博野县| 辽宁省| 体育| 乌拉特前旗| 平乐县| 南康市| 连云港市| 大新县| 溧阳市|