这个不知道能怎么叫不?现在对这块很迷。以下为个人理解

store是状态管理,是一个对象,有其属性和方法。

常见的值有:state/mutations/actions/getters,

这几个值的意思:

  • state :对数据的全局存储
  • getter: 可以理解为computed ,对数据进行计算
  • mutations :对数据的同步更改
  • actions:对数据的异步更改

例如:

1.创建一个store对象。分为两个部分modules与函数组

  1. import Vue from 'vue'
  2. import Vuex from 'vuex'
  3. import getters from './getters'
  4. import app from './modules/app'
  5. import settings from './modules/settings'
  6. import user from './modules/user'
  7.  
  8. Vue.use(Vuex)
  9.  
  10. const store = new Vuex.Store({
  11. modules: {
  12. app,
  13. settings,
  14. user
  15. },
  16. getters
  17. })
  18.  
  19. export default store

2.函数组getters,来自getters.js

分别是取存储数据中app的菜单状态、机器的状态、用户token、用户avatar、用户名称(一些状态信息)

  1. const getters = {
  2. sidebar: state => state.app.sidebar,
  3. device: state => state.app.device,
  4. token: state => state.user.token,
  5. avatar: state => state.user.avatar,
  6. name: state => state.user.name
  7. }
  8. export default getters

3.modules中的app来自app.js,里面有state/mutations/actions,getters文件中的sidebar,device方法就是取这个文件中的state中sidebar和device的值

  1. import Cookies from 'js-cookie'
  2.  
  3. const state = {
  4. sidebar: {
  5. opened: Cookies.get('sidebarStatus') ? !!+Cookies.get('sidebarStatus') : true,
  6. withoutAnimation: false
  7. },
  8. device: 'desktop'
  9. }
  10.  
  11. const mutations = {
  12. TOGGLE_SIDEBAR: state => {
  13. state.sidebar.opened = !state.sidebar.opened
  14. state.sidebar.withoutAnimation = false
  15. if (state.sidebar.opened) {
  16. Cookies.set('sidebarStatus', 1)
  17. } else {
  18. Cookies.set('sidebarStatus', 0)
  19. }
  20. },
  21. CLOSE_SIDEBAR: (state, withoutAnimation) => {
  22. Cookies.set('sidebarStatus', 0)
  23. state.sidebar.opened = false
  24. state.sidebar.withoutAnimation = withoutAnimation
  25. },
  26. TOGGLE_DEVICE: (state, device) => {
  27. state.device = device
  28. }
  29. }
  30.  
  31. const actions = {
  32. toggleSideBar({ commit }) {
  33. commit('TOGGLE_SIDEBAR')
  34. },
  35. closeSideBar({ commit }, { withoutAnimation }) {
  36. commit('CLOSE_SIDEBAR', withoutAnimation)
  37. },
  38. toggleDevice({ commit }, device) {
  39. commit('TOGGLE_DEVICE', device)
  40. }
  41. }
  42.  
  43. export default {
  44. namespaced: true,
  45. state,
  46. mutations,
  47. actions
  48. }

4.同理,其中const { showSettings, fixedHeader, sidebarLogo } = defaultSettings是设置showSettings, fixedHeader, sidebarLogo的初始值,这些值写在settings.js文件中

  1. import defaultSettings from '@/settings'
  2.  
  3. const { showSettings, fixedHeader, sidebarLogo } = defaultSettings
  4.  
  5. const state = {
  6. showSettings: showSettings,
  7. fixedHeader: fixedHeader,
  8. sidebarLogo: sidebarLogo
  9. }
  10.  
  11. const mutations = {
  12. CHANGE_SETTING: (state, { key, value }) => {
  13. if (state.hasOwnProperty(key)) {
  14. state[key] = value
  15. }
  16. }
  17. }
  18.  
  19. const actions = {
  20. changeSetting({ commit }, data) {
  21. commit('CHANGE_SETTING', data)
  22. }
  23. }
  24.  
  25. export default {
  26. namespaced: true,
  27. state,
  28. mutations,
  29. actions
  30. }

5.modules中的user来自文件user.js,这个文件除state/mutations/actions外还有几个方法

  1. import { login, logout, getInfo } from '@/api/user'
  2. import { getToken, setToken, removeToken } from '@/utils/auth'
  3. import { resetRouter } from '@/router'
  4.  
  5. const state = {
  6. token: getToken(),
  7. name: '',
  8. avatar: ''
  9. }
  10.  
  11. const mutations = {
  12. SET_TOKEN: (state, token) => {
  13. state.token = token
  14. },
  15. SET_NAME: (state, name) => {
  16. state.name = name
  17. },
  18. SET_AVATAR: (state, avatar) => {
  19. state.avatar = avatar
  20. }
  21. }
  22.  
  23. const actions = {
  24. // user login
  25. login({ commit }, userInfo) {
  26. const { username, password } = userInfo
  27. return new Promise((resolve, reject) => {
  28. login({ username: username.trim(), password: password }).then(response => {
  29. const { data } = response
  30. commit('SET_TOKEN', data.token)
  31. setToken(data.token)
  32. resolve()
  33. }).catch(error => {
  34. reject(error)
  35. })
  36. })
  37. },
  38.  
  39. // get user info
  40. getInfo({ commit, state }) {
  41. return new Promise((resolve, reject) => {
  42. getInfo(state.token).then(response => {
  43. const { data } = response
  44.  
  45. if (!data) {
  46. reject('Verification failed, please Login again.')
  47. }
  48.  
  49. const { name, avatar } = data
  50.  
  51. commit('SET_NAME', name)
  52. commit('SET_AVATAR', avatar)
  53. resolve(data)
  54. }).catch(error => {
  55. reject(error)
  56. })
  57. })
  58. },
  59.  
  60. // user logout
  61. logout({ commit, state }) {
  62. return new Promise((resolve, reject) => {
  63. logout(state.token).then(() => {
  64. commit('SET_TOKEN', '')
  65. removeToken()
  66. resetRouter()
  67. resolve()
  68. }).catch(error => {
  69. reject(error)
  70. })
  71. })
  72. },
  73.  
  74. // remove token
  75. resetToken({ commit }) {
  76. return new Promise(resolve => {
  77. commit('SET_TOKEN', '')
  78. removeToken()
  79. resolve()
  80. })
  81. }
  82. }
  83.  
  84. export default {
  85. namespaced: true,
  86. state,
  87. mutations,
  88. actions
  89. }

详细文档:https://vuex.vuejs.org/zh/

vue学习过程总结(06) - vue的数据存储store的更多相关文章

  1. 循序渐进VUE+Element 前端应用开发(27)--- 数据表的动态表单设计和数据存储

    在我们一些系统里面,有时候会需要一些让用户自定义的数据信息,一般这些可以使用扩展JSON进行存储,不过每个业务表的显示项目可能不一样,因此需要根据不同的表单进行设计,然后进行对应的数据存储.本篇随笔结 ...

  2. 纯Vue实现网页日常任务清单小功能(数据存储在浏览器)

    任务清单可以极大提高我们的工作效率.哪些事情办了.哪些事情代办.哪些是紧急需要办的事情等等. 在组件化编码实战3的基础上进一步改进.将原先的数据保存的浏览器中.就可以做到关闭网页也不会丢失数据的情况 ...

  3. vue学习记录:vue引入,validator验证,数据信息,vuex数据共享

    最近在学习vue,关于学习过程中所遇到的问题进行记录,包含vue引入,validator验证,数据信息,vuex数据共享,传值问题记录 1.vue 引入vue vue的大致形式如下: <temp ...

  4. vue前端页面跳转参数传递及存储

    不同页面间进行参数传递,实现方式有很多种,最简单最直接的方式就是在页面跳转时通过路由传递参数,如下所示. 路由传递参数 this.$router.push({ name: '跳入页面', params ...

  5. vue 缓存的keepalive页面刷新数据

    用到这个的业务场景是这样的: a页面点击新建列表按钮进入到新建的页面b,填写b页面并点击b页面确认添加按钮,把这些数据带到a页面,填充到列表(数组),可以添加多条, 点击这条的时候进入到编辑页面,确认 ...

  6. 使用Vue做个简单的评论 + localstorage存储

     1.引入Vue.js 2.编写代码 代码 <!DOCTYPE html> <html lang="zh"> <head> <meta c ...

  7. 在Winform中直接录入表格数据和在Vue&Elment中直接录入表格数据的比较

    一般来说,录入数据的时候,我们都采用在一个窗体界面中,根据不同内容进行录入,但是有时候涉及主从表的数据录入,从表的数据有时候为了录入方便,也会通过表格控件直接录入.在Winform开发的时候,我们很多 ...

  8. 使用VUE+SpringBoot+EasyExcel 整合导入导出数据

    使用VUE+SpringBoot+EasyExcel 整合导入导出数据 创建一个普通的maven项目即可 项目目录结构 1 前端 存放在resources/static 下 index.html &l ...

  9. Vue学习笔记六:v-model 数据双向绑定

    目录 v-model简介和适用范围 新建HTML 所见即所得 v-model模拟简易计算器 v-model简介和适用范围 Vue的一大特点之一就是数据的双向绑定,v-model就是实现这个功能的指令, ...

随机推荐

  1. 虫师Selenium2+Python_11、自动化测试项目实战

    P276 11.1.3 自动化测试用例编写原则 在编写自动化测试用例过程中应该遵循以下原则: 1.一个用例为一个完整的场景,从用户登录系统到最终退出并关闭浏览器: 2.一个用例只能验证一个功能点,不要 ...

  2. D介绍-概述

    INTRODUCTION THE SELENIUM PROJECT AND TOOLS Selenium controls web browsers Selenium is many things, ...

  3. 使用污点分析检查log4j问题

    摘要:log4j问题的余波还在继续,为什么这个问题潜伏了这么长时间,大家一直没有发现?这里从静态分析的角度谈下log4j问题的发现. 本文分享自华为云社区<使用污点分析检查log4j问题> ...

  4. 基于UDP传输协议局域网文件接收软件设计 Java版

    网路传输主要的两大协议为TCP/IP协议和UDP协议,本文主要介绍基于UDP传输的一个小软件分享,针对于Java网络初学者是一个很好的练笔,大家可以参考进行相关的联系,但愿能够帮助到大家. 话不多说, ...

  5. 动静分离+url地址重定向+HTTPS协议

    动静分离+url地址重定向+HTTPS协议

  6. Solution -「CF 923E」Perpetual Subtraction

    \(\mathcal{Description}\)   Link.   有一个整数 \(x\in[0,n]\),初始时以 \(p_i\) 的概率取值 \(i\).进行 \(m\) 轮变换,每次均匀随机 ...

  7. python 定时任务apscheduler的使用

    apscheduler 的使用   我们项目中总是避免不了要使用一些定时任务,比如说最近的项目,用户点击报名考试以后需要在考试日期临近的时候推送小程序消息提醒到客户微信上,翻了翻 fastapi 中的 ...

  8. suse 12 二进制部署 Kubernetets 1.19.7 - 第01章 - 创建CA证书和kubectl集群管理命令

    文章目录 1.kubernetes集群部署 1.0.创建CA证书和秘钥 1.0.0.安装cfssl工具 1.0.1.创建根证书 1.0.2.创建证书签名请求文件 1.0.3.生成CA证书和秘钥 1.0 ...

  9. c++ 动态内存 动态数组

    动态内存-动态数组 习题12.23 //连接字符串到动态数组 char *c = new char[20](); char a[] = "hello "; char b[] = & ...

  10. MXNet源码分析 | KVStore进程间通信

    本文主要基于MXNet1.6.0版本进行分析. 在上一篇文章中,我们分析了MXNet中KVStore的进程内通信机制.在这篇文章中,我们主要分析KVStore如何进行多节点分布式通信. 在KVStor ...