vuex和单纯的全局对象有两点不同:

  1. vuex的状态存储是响应式的:store中的状态发生变化响应的组件也会发生变化。
  2. 不能直接改变store中的状态:只能通过commit mutation 改变。
  1. 安装
    npm install vuex --save
  2. 使用:确保全局下载过Vue,并且引用,
  1. import vuex from 'vuex'
  2. Vue.use(vuex)
  1. 创建第一个store
  1. let store = new store({
  2. state:{
  3. count:0
  4. },
  5. mutation:{
  6. increment(state){
  7. state.count++
  8. }
  9. }
  10. })

4.在页面上显示数据,state(辅助函数mapState),mutation(辅助函数mapMutation),getters(辅助函数mapGetters)
第一步,创建store.js
“`
import Vue from ‘vue’
import vuex from ‘vuex’
Vue.use(vuex);

let store = new vuex.Store({
state:{
count:0,
todos:[
{id:1,text:’第一条todo’,done:true},
{id:2,text:’第二条todo’,done:false},
]
},
getters:{
todoDone(state){
return state.todo.filter(todo =>todo.done)
}
},
mutations:{
increment (state,payload) {
state.count += payload.amount
},
decrement(state,payload){
state.count -= payload.amount
}
},
actions:{
increment(context,payload){
debugger
console.log(context,payload);
context.commit(‘increment’,payload)
},
//还可以以解构赋值的方式来显示参数,直接拿到commit方法,不用context.commit
decrement({commit},payload){
commit(‘decrement’,payload)
}
}
});

export default store;

  1. 第二步,将store挂载到vue中,这样vue根实例及其每个子组件都可以直接使用store

import store from ‘./store.js’

new Vue({
el: ‘#app’,
store,
render: h => h(App)
})

  1. 第三步,在App.vue文件中显示,并且加减数据。


{{$store.state.count}}-{{count1}}

<button @click=”submit”>增加
<button @click=”reduce”>减少



    <li v-for=’item in todo’ :key=”item.id”>
    {{item.id}}
    {{item.text}}
    {{item.done}}

  1. 5. module使用方法:当store对象变得非常大,非常臃肿的时候,这时候可以使用modules来分割成模块,方便管理与维护
  2. * 第一种:直接在一个store.js文件中写入好几个对象,然后在modules中注册。

const moduleA = {
state: { … },
mutations: { … },
actions: { … },
getters: { … }
}

const moduleB = {
state: { … },
mutations: { … },
actions: { … }
}

const store = new Vuex.Store({
modules: {
a: moduleA,
b: moduleB
}
})

store.state.a // -> moduleA 的状态
store.state.b // -> moduleB 的状态

  1. * 第二种方法:没个模块可以写在一个js文件中,然后倒入到store.js
  2. 首先moduleA.js文件:

export let moduleA = {
state:{
numA:10
},
mutations:{},
actions:{},
getters:{}
}
其次moduleB.js文件中:
let moduleB = {
state:{
numB:10
},
mutations:{},
actions:{},
getters:{}
}

export default moduleB;

  1. 然后在store.js中统一导入就可以使用了:

import {moduleA as a}from ‘./moduleA.js’
import moduleB from ‘./moduleB.js’
console.log(a)

let store = new vuex.Store({

modules:{
a:a,
b:moduleB
}
})
##### 这里稍微简单总结一下:export和export default的使用区别 * export 可以倒出一赋值语句,如:export let moduleA = {},但是在导入的时候变量名得用{}包起来,如:import {moduleA as a}from ‘./moduleA.js’,也可以重命名. * export default 一个对象的时候可以先定义对象let moduleB = {},然后export default moduleB;;或者 export default {}就行,然后导入的时候命名import moduleB from ‘./moduleB.js’“`

posted on 2019-03-29 18:36 稀里糊涂学前端 阅读() 评论() 编辑 收藏

版权声明:本文为majianwen原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/majianwen/p/10623191.html