Vue3 vuex
十二月 15, 2020
vuex
vuex是vue项目的状态[数据]管理工具,用于获取、存储、操作数据
vuex构成部分
1. state 状态
2. actions 动作
3. mutations 动作的下一步,用于修改数据
4. getters 几乎不使用
流程
- 安装
1
yarn add vuex@next
- 在src目录下建立store文件夹再创建index.ts
- 注册store
src/main.ts中 use(store) - 单独数据块
在store文件夹下创建- namespaced
- state
- actions
- mutations
- src/App.vue
- 引入并实例化
- 获得数据用计算属性,使用方法store.dispatch({type,data})
案例
store的入口文件
1
2import { createStore } from 'vuex'
import homeStore from './homeStore' // 接下来创建homeStore这个数据块数据块
在store文件夹下创建homeStore.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33const homeStore = {
namespaced: true, // 是否使用命名空间,如果使用的话调用数据前加上仓库名
// 例: homeStore/getList
state: { // 用于存放数据
// 数据
list: []
},
actions: { // 给组件提供方法调用
// 例:
async getList({commit},{val}){
// commit为仓库里解构出来的方法,用于将action发送给mutations
// val为前端组件store.dispatch({type,data})的data中解构出来的
// 内部书写逻辑
const r = await api.abcdReq(); // 假设发个请求
if(r) {
commit({
type: 'GET_LIST', // type 书写常量,也是下面mutations中方法的调用名
payload: r.data // data随意书写的,主要将r接收来的数据放在负载的payload中
})
}
}
},
mutations: {
GET_LIST(state, { payload }) {
// state 为该仓库中的state数据
// { payload }为上面actions中传递下来的payload并解构
state.list = payload // 将仓库数据的list修改为payload负载中的值
}
},
};
export default homeStore;App.vue
1
2
3
4
5
6
7
8
9
10
11
12
13import { useStore } from 'vuex' // 引入
const store = useStore() // 实例化
const list = computed(()=>store.state.homeStore.list) // 计算属性获取方法
onMounted(()=>{
store.dispatch({
type: 'homeStore/getlist', // 如果没用命名空间则不需要homeStore 但不利于管理
val: 'asda' // val可以取名
})
})
return {
//.... 记得return 如果用了script标签setup语法糖则不需要
}
查看评论