vuex store 缓存存储原理分析

 更新时间:2022年07月27日 16:57:38   作者:Osborn521  
这篇文章主要介绍了vuex store 缓存存储原理,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

vuex store 缓存存储原理

vuex 的设计是将数据存在一个对象树的变量中,我们的应用(vue应用)从这个变量中取数据,然后供应用使用,当将当前页面关闭, vuex 中的变量会随着消失,重新打开页面的时候,需要重新生成。

而,浏览器缓存(cookie,localstorage等)是将数据存到浏览器的某个地方,关闭页面,不会自动清空这些数据,当再次打开这个页面时,还是能取到之前存在浏览器上的数据(cookie,localstorage等)。

要使用 vuex 还是使用浏览器缓存,要看具体的业务场景。比如:像用户校验的 token 就可以存在 cookie 中,因为用户再次登录的时候能用到。而像用户的权限数据,这些是有一定安全性考虑,且不同用户的权限不同,放在 vuex 中更合理,用户退出时,自动销毁。

其次,vuex 中的 state 是单向的,也可以异步操作,这两个没有冲突。

vuex 中的 state 的设计思路是保证数据的一致性和连续性,而让 state 中的值只能通过 action 来发起 commit,进而改变 state 中的值。

而,action 中是 同步 还是 异步,都是单向地改变 state 中的值。 

如何使用store缓存数据

this.$store.commit('方法名',值)【存储】
this.$store.state.方法名【取值】

我使用的是 vue-element-admin

1 src/store/index.js 写方法

import Vue from 'vue'
import Vuex from 'vuex'
import getters from './getters'
Vue.use(Vuex)
const modulesFiles = require.context('./modules', true, /\.js$/)
const modules = modulesFiles.keys().reduce((modules, modulePath) => {
  const moduleName = modulePath.replace(/^\.\/(.*)\.\w+$/, '$1')
  const value = modulesFiles(modulePath)
  modules[moduleName] = value.default
  return modules
}, {})
const store = new Vuex.Store({
  modules,
  getters,
  state: {               // SET_IMPORT 设置的这
    imports: []
  },
  mutations: {
    SET_IMPORT(state, routes) {      // 设置 SET_IMPORT方法,方法中设置存储某个值
      state.imports = routes
    }
  }
})
export default store

2 src/store/getter.js

const getters = {
  sidebar: state => state.app.sidebar,
  errorLogs: state => state.errorLog.logs,
  imports: state => state.imports    // 存储上面设置的 imports 字段
}
export default getters

3 使用 store 存取数据

const nullim = []
    var myMap = {}
    // 塞入键值对,当前上传文件
    myMap['filename'] = rawFile.name
    myMap['result'] = 0
    nullim.push(myMap)
this.$store.commit('SET_IMPORT', nullim)    // 存入缓存,调用 SET_IMPORT 方法
const old_imports = this.$store.getters.imports        // 取缓存中数据,通过字段名

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。 

相关文章

  • Vue使用Prism实现页面代码高亮展示示例

    Vue使用Prism实现页面代码高亮展示示例

    这篇文章主要为大家介绍了Vue使用Prism实现页面代码高亮展示示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • Vue3按需引入Element Plus以及定制主题色教程

    Vue3按需引入Element Plus以及定制主题色教程

    由于涉及到vue框架单网页应用首屏加载慢这个问题,我们需尽量减少加载负担,故采用按需引入的方式,只引入项目中用到的组件,这篇文章主要给大家介绍了关于Vue3按需引入Element Plus以及定制主题色的相关资料,需要的朋友可以参考下
    2023-06-06
  • 使用Vue-cli 中为单独页面设置背景图片铺满全屏

    使用Vue-cli 中为单独页面设置背景图片铺满全屏

    这篇文章主要介绍了使用Vue-cli 中为单独页面设置背景图片铺满全屏,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • vue.js 获取select中的value实例

    vue.js 获取select中的value实例

    下面小编就为大家分享一篇vue.js 获取select中的value实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-03-03
  • vue中el-table实现穿梭框(数据可以上移下移)

    vue中el-table实现穿梭框(数据可以上移下移)

    本文主要介绍了vue中el-table实现穿梭框(数据可以上移下移),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • IE9 elementUI文件上传的问题解决

    IE9 elementUI文件上传的问题解决

    这篇文章主要介绍了IE9 elementUI文件上传的问题解决,有需要了解IE9 elementUI文件上传的朋友可参考。希望此文章对各位有所帮助
    2018-10-10
  • vue3将页面生成pdf导出的操作指南

    vue3将页面生成pdf导出的操作指南

    最近工作中有需要将一些前端页面(如报表页面等)导出为pdf的需求,下面这篇文章主要给大家介绍了关于vue3 如何将页面生成 pdf 导出,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-07-07
  • Vue中div contenteditable 的光标定位方法

    Vue中div contenteditable 的光标定位方法

    今天小编就为大家分享一篇Vue中div contenteditable 的光标定位方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-08-08
  • Vue中利用better-scroll组件实现横向滚动功能

    Vue中利用better-scroll组件实现横向滚动功能

    横向滚动这个功能是我们日常开发中经常会遇到的一个需求,下面这篇文章主要给大家介绍了关于Vue中如何利用better-scroll组件实现横向滚动的相关资料,需要的朋友可以参考下
    2021-06-06
  • 总结Vue Element UI使用中遇到的问题

    总结Vue Element UI使用中遇到的问题

    这篇文章主要介绍了Vue Element UI使用中遇到的问题,对ElementUI感兴趣的同学,可以参考下
    2021-05-05

最新评论