# 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
Home页面的数字:{{$store.state.num}}
```
或者写为:
```html
About页面的数字:{{num}}
```
### 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
Home页面的数字:{{$store.getters.getNum}}
```
### 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
Home页面的数字:{{num}}
About页面的数字:{{getNum}}
```
mapMutations和mapActions在组件中都是写在methods里面
```html
```
### 6、拆分写法
store中的所有属性,都可以拆分成单独的js文件来书写
### 7、modules
我们的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
About页面的数字:{{getNum}}
```