转载

从零开始系列之vue全家桶(3)安装使用vuex

安装

1.cd 项目 (如cd my-vue)后,输入
cnpm i vuex -S
(-S即是--save的缩写,会将包的名称及版本号放在dependencies里面,而-D就是--save-dev的缩写,安装的包的名称及版本号就会存在package.json的devDependencies这个里面)

2.在src下新建一个名叫store的文件夹,与App.vue同级,并在文件夹下新建store.js文件。因为store.js是基于vue的,所以需要引入vue和vuex。注意大小写。
import Vue from 'vue'
import Vuex from 'vuex'


3.使用vue全家桶的任何一个都需要进行use一下,所以vuex也不例外。在引入后面写上使用。
Vue.use(Vuex)


4.继续导出默认出口。
export default new Vuex.Store({
state:{..},
mutations:{..},
  ..
})

5.在 main.js 中导入
import store from './store/store'
在实例化中添加store,

6.开始运用~

应用包含

(1)State

Vuex 使用 单一状态树 —— State,用一个对象就包含了全部的应用层级状态。就是放页面共享数据的地方。(私有数据还是放自己.vue文件更好)

(2)Actions

Action 类似于 mutation,不同在于:
Action 提交的是 mutation,而不是直接变更状态。
Action 可以包含任意异步操作。
就是说异步方法放入Actions,如ajax请求,求情获取到数据之后显示提交mutation里面的方法来改变state。

(3)Mutations

更改 Vuex 的 store 中的状态的唯一方法是提交 mutation。一条重要的原则就是要记住 mutation 必须是同步函数。组件中使用 this.$store.commit('xxx') 提交,

在action里面使用commit('xxx') 提交。

(4)Getters

有时候我们需要从 store 中的 state 中派生出一些状态,Vuex 允许我们在 store 中定义『getters』(可以认为是 store 的计算属性)。Getters 接受 state 作为其第一个参数:

getters:{    doneTools:state=>{        return state.todos.filter(todo=>todo.done)    }}

Getters 会暴露为 store.getters 对象供调用

store.getters.doneTodos

(5)Modules

简单点说就是为了方便操作和管理,模块化。
由于使用单一状态树,应用的所有状态会集中到一个比较大的对象。当应用变得非常复杂时,store 对象就有可能变得相当臃肿。
为了解决以上问题,Vuex 允许我们将 store 分割成模块(module)。每个模块拥有自己的 state、mutation、action、getter、甚至是嵌套子模块——从上至下进行同样方式的分割。
最后上几张图方便查看具体写法:


正文到此结束
Loading...