vue的状态管理模式vuex
vuex是一个专门为vue.js设计的状态管理模式,并且也可以使用devtools进行调试。 备注:本文的示例等代码将会采用es6的语法。 链接
vuex是什么?先引用vuex官网的话: Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。 状态管理模式、集中式存储管理 一听就很高大上,蛮吓人的。在我看来 vuex 就是把需要共享的变量全部存储在一个对象里面,然后将这个对象放在顶层组件中供其他组件使用。这么说吧,将vue想作是一个js文件、组件是函数,那么vuex就是一个全局变量,只是这个“全局变量”包含了一些特定的规则而已。 在vue的组件化开发中,经常会遇到需要将当前组件的状态传递给其他组件。父子组件通信时,我们通常会采用 props + emit 这种方式。但当通信双方不是父子组件甚至压根不存在相关联系,或者一个状态需要共享给多个组件时,就会非常麻烦,数据也会相当难维护,这对我们开发来讲就很不友好。vuex 这个时候就很实用,不过在使用vuex之后也带来了更多的概念和框架,需慎重! vuex里面都有些什么内容?Talk is cheap,Show me the code. 先来一段代码间隔下这么多的文字: {
commit('SET_AGE',18);
},1000);
}
},modules: {
a: modulesA
}
}
这个就是最基本也是完整的vuex代码;vuex 包含有五个基本的对象:
vue-cli中使用vuex的方式一般来讲,我们都会采用vue-cli来进行实际的开发,在vue-cli中,开发和调用方式稍微不同。 state.js示例: export default state;
getters.js示例(我们一般使用getters来获取state的状态,而不是直接使用state): {
return state.name;
}
export const age = (state) => { export const other = (state) => { mutation-type.js示例(我们会将所有mutations的函数名放在这个文件里): mutations.js示例: export default {
types.SET_NAME { state.name = name; },types.SET_AGE { state.age = age; } }; actions.js示例(异步操作、多个commit时): export default {
nameAsyn({commit},{age,name}) { commit(types.SET_NAME,name); commit(types.SET_AGE,age); } }; modules--m1.js示例(如果不是很复杂的应用,一般来讲是不会分模块的): index.js示例(组装vuex): vue.use(vuex);
const debug = process.env.NODE_ENV !== 'production'; // 开发环境中为true,否则为false export default new vuex.Store({ 最后将store实例挂载到main.js里面的vue上去就行了 new Vue({
el: '#app',store,render: h => h(App) }); 在vue组件中使用时,我们通常会使用mapGetters、mapActions、mapMutations,然后就可以按照vue调用methods和computed的方式去调用这些变量或函数,示例如下: / 只写组件中的script部分 /
export default { computed: { ...mapGetters([ name,age ]) },methods: { ...mapMutations({ setName: 'SET_NAME',setAge: 'SET_AGE' }),...mapActions([ nameAsyn ]) } }; 总结以上就是vuex 的相关知识,其实vuex很简单,多用几次就会熟悉了。以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |