# vuex练习 **Repository Path**: liu_xia_hui/vuex-exercise ## Basic Information - **Project Name**: vuex练习 - **Description**: vuex练习vuex练习vuex练习vuex练习 - **Primary Language**: JavaScript - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2022-07-08 - **Last Updated**: 2022-09-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## Vuex Vuex 是一个专为 Vue.js 应用程序开发的**状态管理模式**。 调试工具:vue devtools > Vuex就像眼镜:您自会知道什么时候需要它。 ### 1、state 在store中定义数据,在组件中直接使用: 目录:`store/index.js` ```js export default new Vuex.Store({ // state相当于组件中的data,专门用来存放全局的数据 state: { num: 0 }, getters: {}, mutations: {}, actions: {}, modules: {} }) ``` 目录:`Home.vue` ```html ``` 或者写为: ```html ``` ### 2、getters 将组件中统一使用的computed都放到getters里面来操作 目录:`store/index.js` ```js export default new Vuex.Store({ // state相当于组件中的data,专门用来存放全局的数据 state: { num: 0 }, // getters相当于组件中的computed,getters是全局的,computed是组件内部使用的 getters: { getNum(state) { return state.num } }, mutations: {}, actions: {}, modules: {} }) ``` 目录:`Home.vue` ```html ``` ### 3、mutations 更改 Vuex 的 store 中的状态的唯一方法是提交 mutation。 目录:`store/index.js` ```js export default new Vuex.Store({ // state相当于组件中的data,专门用来存放全局的数据 state: { num: 0 }, // getters相当于组件中的computed,getters是全局的,computed是组件内部使用的 getters: { getNum(state) { return state.num } }, // mutations相当于组件中的methods,但是它不能使用异步方法(定时器、axios) mutations: { // 让num累加 // payload是一个形参,如果组件在commit时,有传这个参数过来,就存在,如果没有传过来,就是undefined increase(state, payload){ state.num += payload ? payload : 1; } }, actions: {}, modules: {} }) ``` 目录:`Btn.vue` ```html ``` ### 4、actions actions是store中专门用来处理异步的,实际修改状态值的,还是mutations 目录:`store/index.js` ```js // 在store(仓库)下的index.js这份文件,就是用来做状态管理 import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) export default new Vuex.Store({ // state相当于组件中的data,专门用来存放全局的数据 state: { num: 0 }, // getters相当于组件中的computed,getters是全局的,computed是组件内部使用的 getters: { getNum(state) { return state.num } }, // mutations相当于组件中的methods,但是它不能使用异步方法(定时器、axios) mutations: { // 让num累加 // payload是一个形参,如果组件在commit时,有传这个参数过来,就存在,如果没有传过来,就是undefined increase(state, payload){ state.num += payload ? payload : 1; }, // 让num累减 decrease(state){ state.num--; } }, // actions专门用来处理异步,实际修改状态值的,依然是mutations actions: { // 点击了“减1”按钮后,放慢一秒再执行减法 decreaseAsync(context){ context.commit('decrease') } }, modules: {} }) ``` 目录:`Btn.vue` ```html ``` ### 5、辅助函数 mapState和mapGetters在组件中都是写在computed里面 ```html ``` mapMutations和mapActions在组件中都是写在methods里面 ```html ``` ### 6、拆分写法 store中的所有属性,都可以拆分成单独的js文件来书写 ### 7、modules ![](.\1111.png)我们的store可以认为是一个主模块,它下边可以分解为很多子模块,子模块都可以单独领出来写,写完再导入到主模块中。下面以 `users` 子模块举例: 将mutations中所有的方法,归纳起来。 目录:`mutations_type.js` ```js export const MUTATIONS_TYPE = { INCREASE: 'increase', DECREASE: 'decrease' } export default { // 让num累加 // payload是一个形参,如果组件在commit时,有传这个参数过来,就存在,如果没有传过来,就是undefined [MUTATIONS_TYPE.INCREASE](state, payload){ state.num += payload ? payload : 1; }, // 让num累减 [MUTATIONS_TYPE.DECREASE](state){ state.num--; } } ``` 目录:`store/index.js` ```js import mutations from './mutaions_type' export default new Vuex.Store({ ... mutations, ... }) ``` 组件中: ```html ```