若是看完本文后,还对vuex傻傻分不清,不清楚 state,Getter,Mutation,Action,Module , 那么请回复我 wx 15932639097 ,必定是我写的还不够清晰,我来改
<template> <div> <button @click="add">+1</button> <p>数值如今是 :{{count}}</p> </div> </template> <script> export default { data() { return { count : 0 } }, methods : { add() { this.count++ } } } </script>
如今咱们要把计时的功能抽象出一个组件vue
<!-- 父组件 --> <template> <div> <button @click="add">+1</button> <z-add></z-add> </div> </template> <script> import add from '@/components/add.vue' export default { components:{ "z-add":add } } </script> <!-- add.vue 子组件 --> <template> <div> <p>数值如今是 :{{count}}</p> </div> </template> <script> export default { data() { return { count : 0 } } } </script>
vuex实现上面的代码逻辑
<!-- main.js 引用vuex --> import vuex from 'vuex' Vue.use(vuex); var store = new vuex.Store({//store对象 state:{ count : 0 } }) <!-- 父组件 --> <template> <div> <button @click='$store.state.count++'>+1</button> <z-add></z-add> </div> </template> <script> import add from '@/components/add.vue' export default { components:{ "z-add":add } } </script> <!-- 子组件 --> <template> <div> <p>数值如今是 :{{$store.state.count}}</p> </div> </template> <script> export default { } </script>
前面为了方便 , 咱们把 store 对象写在了 main.js 里面 , 但实际上为了便于往后的维护 , 咱们分开写更好 , 咱们在 src 目录下 , 新建一个 store 文件夹 , 而后在里面新建一个 index.js :
<!-- src/store/index.js --> import Vue from 'vue' import vuex from 'vuex' Vue.use(vuex); export default new vuex.Store({ state:{ count : 0 } }) <!-- mian.js --> import store from '@/store/index.js' new Vue({ store, ...... }).$mount('#app')
这样就把 store 分离出去了 , 那么还有一个问题是 : 这里 $store.state.count 不管哪一个组件均可以使用 , 那组件多了以后 , 状态也多了 , 这么多状态都堆在 store 文件夹下的 index.js 很差维护怎么办 ?咱们可使用 vuex 的 modules , 在 store/index.js 下新建文件夹 modules ,把业务抽离出去git
<!--index.js--> ... import add from './modules/add' import addceshi from './modules/addceshi' export default new vuex.Store({ modules : { add, addceshi } }) <!-- modules/add.js --> export default { state : { count : 0 } } <!-- modules/addceshi.js --> export default { state : { count : 100 } } <!-- 使用举例 :add.vue --> <template> <div> <p>数值如今是 :{{$store.state.addceshi.count}}</p> </div> </template> <script> export default { } </script>
前面咱们 加法案例 , 咱们对vuex 的依赖仅仅只有一个 $store.state.add.count 一个状态 , 可是若是咱们要进行一个操做 , 须要依赖不少不少个状态 , 那管理起来又麻烦了通俗的理解mutations,里面装着一些改变数据方法的集合,这是Veux设计很重要的一点,就是把处理数据逻辑方法所有放在mutations里面,使得数据和视图分离。切记:Vuex中store数据改变的惟一方法就是mutationgithub
<!-- 举个例子吧,咱们除了count这个一个状态以外,再加一个,例如 addzhuangtai : ture ,当为 true时候为 count 为1 ,为 false 时,count 为 0 -->