1 import Vue from ‘vue‘ 2 import App from ‘./App‘ 3 import store from ‘./store‘ 4 5 Vue.config.productionTip = false 6 7 /* eslint-disable no-new */ 8 new Vue({ 9 el: ‘#app‘, 10 store, 11 render: h => h(App) 12 })
import Vue from ‘vue‘ import Vuex from ‘vuex‘ // 安装插件 Vue.use(Vuex) // 创建Vuex对象,一般命名为store const store = new Vuex.Store({ // state: 存储状态,变量 state: {}, // mutations: mutations是store状态的更新唯一方式,内部定义有关修改state的方法,this.$store.commit(‘方法名‘, 可选参数)进行调用 mutations: {}, // getters: 派生状态,类似computed计算属性,$store.getters.属性名 进行调用 getters: {}, // actions: 类似mutations,但支持异步操作,$store.dispatch(‘方法名‘, 可选参数)进行调用 actions: {}, // modules: store的子模块,内容就相当于是store的一个实例。调用前加上子模块名 modules: {} }) // 导出store export default store
至此为止vuex初始完毕,后续在.vue文件中$store使用store对象
state用于存储状态,变量
App.vue中访问state中的变量
<h2>----------App中直接访问state中的变量----------</h2> <h2>{{$store.state.counter}}</h2>
子组件中访问state中的变量
<h2>{{$store.state.counter}}</h2>
state中所有变量都必须通过mutations中定义的方法进行修改
mutations是store状态的更新唯一方式,内部定义有关修改state的方法,this.$store.commit(‘方法名‘, 可选参数)进行调用
// vue文件中methods用commit调用mutations中的方法 methods: { addition () { this.$store.commit(‘addone‘) }, subtraction () { this.$store.commit(‘subone‘) } }
// mutations中方法的第一个参数必定为state,以此修改state中的变量的值 mutations: { addone (state) { state.counter ++ }, subone (state) { state.counter -- } }
// 所传参数放置于commit括号内方法名后 methods: { addCount (counts) { this.$store.commit(‘incrementCount‘, counts) } }
// mutations内正常调用 mutations: { incrementCount (state, counts) { state.counter += counts } },
参数也可传对象
// 传参(对象) addStudent () { const stu = {id: 115, name: ‘jack‘, age: 31} this.$store.commit(‘addStudent‘, stu) } //接收 addStudent (state, stu) { tate.students.push(stu) }
原文:https://www.cnblogs.com/xzweb/p/12417780.html