一、为什么使用vuex : https://www.cnblogs.com/goloving/p/9080005.html

vuex的功能 和 localstorage 的作用是一样,把数据在一个所有页面都可以存取的地方。但是vuex的数据具有响应式(类似数据双向绑定),而 localstorage 的数据是固定的,必须手动设置。

二、vuex 的使用:https://www.cnblogs.com/hermit-gyqy/p/11270315.html(更直观) 或 https://blog.51cto.com/9161018/2351075(说明更详细)   或  https://vuex.vuejs.org/zh/guide/(官网)

  1、基本使用方法:

    state:存储状态(可以理解为变量)可以从计算属性中返回某个状态

    getters:通常用在数据的二次处理(过滤数据...),可以理解为state的计算属性

    mutations:修改状态,并且是同步的。

    actions:异步操作。

import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex) const store = new Vuex.Store({
state: { // 存储状态(可以理解为变量)可以从计算属性中返回某个状态
count: 8
},
getters: { // 通常用在数据的二次处理(过滤数据...),可以理解为state的计算属性
newCount (state) {
return state.count + 1 // 这里一旦count改变,newCount也会同步改变
}
},
mutations: { // 修改状态,并且是同步的
changeCount (state, val) {
state.count = val
}
},
actions: { // 异步操作
actCount (context, val) {
setTimeout(function () {
context.commit('changeCount', val) // 直接可以获取到commit方法,不用是context.commit
}, 1000)
}
}
}) export default store

  注:不能直接改变 store 中的状态。改变 store 中的状态的唯一途径就是显式地提交 (commit) mutation。

三、vuex 的 模块化:便有扩展          https://vuex.vuejs.org/zh/guide/modules.html(官网,比较详细)

  modules: Vuex 允许我们将 store 分割成模块(module)。每个模块拥有自己的 state、mutation、action、getter 用法其实和上面是一样的。

  注意:默认情况下,模块内部的 action、mutation 和 getter 是注册在全局命名空间的——这样使得多个模块能够对同一 mutation 或 action 作出响应。

  说明:vuex的数据,每一个组件文件都有很多的数据,如果把所有的数据都放在一个文件中,就会很不好管理。所以需要把vuex数据拆分出来,一个vuex文件管理一个页面中数据。

// vuex目录下的index.js
import Vue from 'vue'
import vuex from 'vuex'
import acApply from './active-apply'
import ContentStore from './content' // 引入content.js
Vue.use(vuex)
export default new vuex.Store({
modules: {
acApply,
content: ContentStore
}
})
/* acApply 模块 */
export default {
state: {
userMsg: 99
},
mutations: {
cgUserMsg (state, val) {
state.userMsg = val
}
}
}

  1、获取content模块中 store 的数据

<div>{{$store.state.content.count}}</div>

  2、调用模块内的 action、mutation 和 getter 方法:默认情况下,模块内部的 action、mutation 和 getter 是注册在全局命名空间的。

this.$store.commit('cgUserMsg',45)  // 和调用全局store中的对应方法一样

  3、命名空间:   默认情况下,模块内部的 action、mutation 和 getter是全局的,如果需要模块具有更高的封装度和复用性,可以给我们设置命名空间。

     参考:使用模块后不借助辅助函数访问数据的方法  https://blog.csdn.net/weixin_43660626/article/details/90448312

/* acApply 模块 */
export default {
namespaced: true,
state: {
userMsg: 99
},
mutations: {
cgUserMsg (state, val) {
state.userMsg = val
}
}
}
this.$store.commit('acApply/cgUserMsg',45)   // 调用的时候带上模块名称

四、使用 Vuex 的辅助函数:https://www.jianshu.com/p/46ed0316c31b  或 https://www.jianshu.com/p/7f790b4188e5 或 https://www.cnblogs.com/padding1015/p/8734031.html 或 https://vuex.vuejs.org/zh/api/#mapstate(官网)

import {mapState,mapGetters,mapActions,mapMutations} from 'vuex'

  1、mapState:将store中state数据映射到组件的计算属性中computed中:映射后,组件通过this.name就可以获取到了。

     注意事项,映射的名称不要和当前组件的data,methods名称发生冲突,否则会被覆盖。

  computed: {
...mapState(["name"]), //name和vuex中的state保持一至。直接把vuex中的name映射到当前组件中
},
 create () {
console.log(this.name) // 组件中可以直接通过this获取到vuex里面的state值
}

  2、mapMutations:把mutations里面的方法映射到methods中

  methods: {
...mapMutations(['changeCount']), // mapMutations映射到组件的methods中
test () {
this.changeCount(323) // 组件中直接使用,vuex中 mutations 里的方法
}
}

  3、mapAcions:把actions里面的方法映射到methods中

  4、mapGetters:把getters属性映射到computed身上  

  注意:

    1、this.$store.commit 有两种写法:

        //写法一
this.$store.commit('add',{n:10})
//写法二
this.$store.commit({
type:'add',
n:5
})

    2、getters 和 state 一样都是存储数据的,但是getter的数据通常是对state 数据的二次处理。就是类似计算属性的功能,

       store中getters数据的获取,和state获取挂载的对象不同。这点和组件中的 计算属性有点不同:

this.$store.state.count       // stete中值的获取
this.$store.getters.newCount // getters 中值的获取

    3、为什么要把  同步  和  异步  区分开:https://www.zhihu.com/question/48759748(看尤雨溪的回答)

       区分 actions 和 mutations  目的是 为了能用 devtools 追踪状态变化。(就是为了便于调试)

  体会:vuex的明显一个作用就是页面间数据变动是同步的。比如,一个页面中有显示支付银行卡的卡号好,还有选择银行卡的按钮。点击选择银行卡的按钮,

    要跳到另外的一个页面中去选择。选好后,跳回来(回退),如果是用vuex的话,之前的页面显示的银行卡号会同步为自己选择的银行卡号。

    不然的话就需要先存了缓存(本地存储,或公共变量中),然后在相应的页面中去取。比较麻烦。

五、vuex 使用模块后借助辅助函数访问数据的方法:https://vuex.vuejs.org/zh/api/#mapstate(官网中有比较明确的说明)

              


视频 听课笔记

1、mutations是唯一一个可以改变vuex状态的方法集。

映射到计算属性中computed

vue2 — vuex状态管理的更多相关文章

  1. 前端MVC Vue2学习总结(八)——Vue Router路由、Vuex状态管理、Element-UI

    一.Vue Router路由 二.Vuex状态管理 三.Element-UI Element-UI是饿了么前端团队推出的一款基于Vue.js 2.0 的桌面端UI框架,手机端有对应框架是 Mint U ...

  2. vue 通信:父子通信、兄弟通信、跨多层通信、vuex状态管理

    之前简单做了一次vue通信方法的培训,在此记录一下培训的内容. 关于vue通信,大家最先想到的方法应该是props.ref.$emit.$parent,还有vuex,因为这也是我在项目中最常用到的方法 ...

  3. vuex状态管理-数据改变不刷新

    困惑: 在页面初始化的时候,我提交到vuex状态管理,然后在获取的时候获取不到,我找到了出错的地点,并进行了修改,然后可以获取到状态 但是不知道原因? 定义了如下的state const state ...

  4. vuex状态管理demo

    vuex状态管理主要包含四个概念  mapState,mapMutations,mapGetters,mapActions. 编写vuex文件夹下面的store.js import Vue from ...

  5. 前端Vue框架-vuex状态管理详解

    新人报道!多多关照-多提宝贵意见 谢谢- vuex理解 采用集中式存储管理模式.用来管理组件的状态,并以自定义规则去观测实时监听值得变化. 状态模式管理理解 属性 理解 state 驱动应用的数据源 ...

  6. 前端技术之:如何在vuex状态管理action异步调用结束后执行UI中的方法

    一.问题的起源 最近在做vue.js项目时,遇到了vuex状态管理action与vue.js方法互相通信.互操作的问题.场景如下图所示: 二.第一种解决方法 例如,我们在页面初始化的时候,需要从服务端 ...

  7. VueX状态管理器 的应用

    VueX状态管理器 cnpm i vuex axios -S 1 创建Vuex 仓库 import Vue from 'vue' import Vuex from 'vuex' vue.use(Vue ...

  8. vue第十八单元(单向数据流 vuex状态管理)

    第十八单元(单向数据流 vuex状态管理) #课程目标 1.理解什么是数据管理模式 2.什么是vuex 3.什么时候使用vuex 4.vuex安装及工作原理 5.vuex语法 #知识点 1.首先来看下 ...

  9. Vuex 状态管理的工作原理

    Vuex 状态管理的工作原理 为什么要使用 Vuex 当我们使用 Vue.js 来开发一个单页应用时,经常会遇到一些组件间共享的数据或状态,或是需要通过 props 深层传递的一些数据.在应用规模较小 ...

随机推荐

  1. HDU 6638 - Snowy Smile 线段树区间合并+暴力枚举

    HDU 6638 - Snowy Smile 题意 给你\(n\)个点的坐标\((x,\ y)\)和对应的权值\(w\),让你找到一个矩形,使这个矩阵里面点的权值总和最大. 思路 先离散化纵坐标\(y ...

  2. python中模块介绍

    一,模块概念 在计算机程序开发的过程当中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护.为了编码更加容易维护,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码 ...

  3. jenkins配置到gitlab拉代码

    参照: jenkins 从git拉取代码-简明扼要 https://www.cnblogs.com/jwentest/p/7065783.html 持续集成①安装部署jenkins从git获取代码-超 ...

  4. Oralce-PL/SQL编程-游标

    PL/SQL(Procedural Language/SQL)是Oracle在数据库中引入的一种过程化编程语言. PL/SQL块结构 声明部分 执行部分(必须的) 异常处理部分 [declare] - ...

  5. 用 Flask 来写个轻博客 (24) — 使用 Flask-Login 来保护应用安全

    Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog 目录 目录 前文列表 扩展阅读 用户登录帐号 用户登录状态 Flask-Login 使用 F ...

  6. Asp.Net Core 第01局:项目创建和部署 转载https://www.jianshu.com/p/9c9750e23b3e

    总目录 一.前言 本文通过从项目创建到部署,简单介绍Asp.Net Core. 二.环境 1.Visual Studio 2017 2.Asp.Net Core 2.2 三.开局 第一手:创建项目   ...

  7. Visual Studio Code 键盘参考表

    2019年4月6日,对照中英翻译. 一般 Ctrl+Shift+P, F1 显示命令调色板 Ctrl+P 快速打开,转到文件… Ctrl+Shift+N  新建窗口/实例 Ctrl+Shift+W   ...

  8. Windows Server 2008 R2 官方简体中文免费企业版/标准版/数据中心版

    Windows Server 2008 R2是一款微软发布的Windows服务器操作系统,和之前发布的Windows Server 2008相比功能更为完善运行更为稳定,提升了系统管理弹性.虚拟化.网 ...

  9. boostrap中lg,md,sm,xs分别对应的像素宽度

    col-xs-   超小屏幕 手机 (<768px)col-sm-  小屏幕 平板 (≥768px)col-md-  中等屏幕 桌面显示器 (≥992px)col-lg-    大屏幕 大桌面显 ...

  10. 【转】在配置静态IP的时候遇到 :bringing up interface eth0 : error unknown connection

    首先这是动态ip配置成功的结果 接下来切换到root用户来配置静态的 按照静态ip的配置方法配置好文件后(具体过程这里就不多加说明) 然后保存退出 当我们重启网卡的时候问题来了(因为本人有点强迫症,多 ...