Vuex的使用
如果您不打算开发大型单页应用,使用 Vuex 可能是繁琐冗余的。确实是如此——如果您的应用够简单,您最好不要使用 Vuex。一个简单的 global event bus 就足够您所需了。但是,如果您需要构建是一个中大型单页应用,您很可能会考虑如何更好地在组件外部管理状态,Vuex 将会成为自然而然的选择。
Vuex 是什么?
vuex是vue的一个插件,是一个专为 Vue.js 应用程序开发的状态管理模式。(状态:数据,改变数据和获取数据)
安装
也是依赖于 npm install vue-cli -g 要先进行全局安装
npm install vuex --save
使用
创建一个文件当做一个store仓库
1 | import Vue from 'vue' |
在main.js中导入store这个仓库
1 | import store from './store/index.js' |
vuex的五大特性
State
Vuex 使用单一状态树,用一个对象就包含了全部的应用层级状态,数据等都写在 state中
1 | var state = { |
Mutations
改变state的状态(数据),通过提交mutations,也就是调用里面的方法( 在 页面中methods使用 this.$store.commit() )
1 | var mutations = { |
Payload,你可以向 store.commit 传入额外的参数,在大多数情况下,载荷应该是一个对象,这样可以包含多个字段并且记录的 mutation 会更易读.
getters
Vuex 允许我们在 store 中定义”getter”(可以认为是 store 的计算属性),类似于 计算属性,对 state里面的数据进行处理,当依赖值发生改变的时候会自动计算,需要将 state对象 传进去.
1 | var getters = { |
Actions
Action 提交的是 mutation,而不是直接变更状态,可以包含任意异步操作。
1 | var actions = { |
Modules
由于使用单一状态树,应用的所有状态会集中到一个比较大的对象。当应用变得非常复杂时,store 对象就有可能变得相当臃肿。为了解决以上问题,Vuex 允许我们将 store 分割成模块(module)。每个模块拥有自己的 state、mutation、action、getter、甚至是嵌套子模块——从上至下进行同样方式的分割
1 | var moduleA = { |
store.state.a // -> moduleA 的状态
store.state.b // -> moduleB 的状态
如何在vue界面使用 写好的store 的 javascript页面
State
导入 mapState 辅助 方法
1 | import { mapState } from 'vuex' |
使用mapState(当名称与 state 的子节点名称相同时,我们也可以给 mapState 传一个字符串数组。)
1 | export default { |
Mutations
1 | methods:{ |
getters
之前说了mapState 可以传递数组,当需要计算属性时,也可以使用对象
1 | computed:{ |
也可以导入 mapGetters 辅助 方法
1 | import { mapGetters } from 'vuex' |
dispatch
dispatch 其实使用的方法与 Mutations其实是一样的,在var actions 的时候,实际上操作的是commit
只是它是异步修改的
1 | methods:{ |
也可以导入mapActions 辅助方法
1 | import { mapActions } from 'vuex' |
组合 Action, Action 通常是异步的,那么如何知道 action 什么时候结束呢?更重要的是,我们如何才能组合多个 action,以处理更加复杂的异步流程?
1 | actions: { |
可以向上面这样组合
更多详细的Vuex的知识可以上官网阅读,以上就是我对Vuex的一些基础理解,有不对的地方欢迎提出