还有不懂Vuex吗?看完你就理解了

开发 前端
如果没有异步操作,那么我们就可以直接在组件内提交状态中的Mutations中自己编写的方法来达成对state成员的操作。

1.什么是vuex?

官方的理解是:Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。Vuex 也集成到 Vue 的官方调试工具 devtools extension,提供了诸如零配置的 time-travel 调试、状态快照导入导出等高级调试功能。

2.什么又是状态管理呢?

让我们从一个简单的 Vue 计数应用开始:

new Vue({
// state
data () {
return {
count: 0
}
},
// view
template: `
<div>{{ count }}</div>
`,
// actions
methods: {
increment () {
this.count++
}
}
})

这个状态管理包括三个部分:

state,驱动应用的数据源;

view,以声明方式将 state 映射到视图;

actions,响应在 view 上的用户输入导致的状态变化。

3.vuex的工作流程

vue官网给的流程图

首先,Vue组件如果调用某个VueX的方法过程中需要向后端请求时或者说出现异步操作时,需要dispatch VueX中actions的方法,以保证数据的同步。可以说,action的存在就是为了让mutations中的方法能在异步操作中起作用。

如果没有异步操作,那么我们就可以直接在组件内提交状态中的Mutations中自己编写的方法来达成对state成员的操作。注意,1.3.3节中有提到,不建议在组件中直接对state中的成员进行操作,这是因为直接修改(例如:this.$store.state.name = 'hello')的话不能被VueDevtools所监控到。

4. Mutations

mutations是操作state数据的方法的集合,比如对该数据的修改、增加、删除等等。

4.1 Mutations使用方法

state是当前VueX对象中的state

payload是该方法在被调用时传递参数使用的

例如,我们编写一个方法,当被执行时,能把下例中的name值修改为"jack",我们只需要这样做

index.js

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

const store = new Vuex.store({
state:{
name:'helloVueX'
},
mutations:{
//es6语法,等同edit:funcion(){...}
edit(state){
state.name = 'jack'
}
}
})

export default store

而在组件中,我们需要这样去调用这个mutation——例如在App.vue的某个method中:

this.$store.commit('edit')

5.Actions

由于直接在mutation方法中进行异步操作,将会引起数据失效。所以提供了Actions来专门进行异步操作,最终提交mutation方法。

Actions中的方法有两个默认参数

context 上下文(相当于箭头函数中的this)对象

payload 挂载参数

例如,我们在两秒中后执行2.2.2节中的edit方法

由于setTimeout是异步操作,所以需要使用actions

actions:{
aEdit(context,payload){
setTimeout(()=>{
context.commit('edit',payload)
},2000)
}
}

6.规范目录结构

store:.
│ actions.js
│ getters.js
│ index.js
│ mutations.js
│ mutations_type.js ##该项为存放mutaions方法常量的文件,按需要可加入

└─modules
Astore.js

对应的内容存放在对应的文件中,和以前一样,在index.js中存放并导出store。state中的数据尽量放在index.js中。而modules中的Astore局部模块状态如果多的话也可以进行细分。

责任编辑:武晓燕 来源: 今日头条
相关推荐

2022-05-03 00:03:11

状态管理前端开发

2020-04-16 10:55:03

Java虚拟机字节码

2020-04-21 23:14:08

数据并发控制

2018-03-21 16:19:40

MVCMVPMVVM

2022-10-20 18:43:32

C语言golang安全

2024-03-15 08:23:26

异步编程函数

2019-09-29 06:12:38

交换机配置vlan

2021-09-06 07:58:47

链表数据结构

2019-12-26 09:15:44

网络IOLinux

2012-11-30 11:19:02

JavaScript

2018-10-08 14:10:46

2019-09-16 08:32:59

递归算法编程

2020-06-18 10:48:44

Linux 系统 数据

2018-03-28 21:40:03

2019-09-18 10:12:37

递归数据结构

2021-08-12 10:36:18

order byMySQL数据库

2019-11-08 11:08:29

测试工程师AI人工智能

2020-11-04 08:37:37

C语言C++内存

2021-06-16 00:57:16

JVM加载机制

2022-02-18 06:56:18

Wi-Fi路由器局域网
点赞
收藏

51CTO技术栈公众号