本文章目的:快速上手vue3 的 vuex ,并了解各个常用的功能。
不常用的和非必要的在此不进行讲述,需要更完善自己的请查看官网。
【建议使用Pinia代替vuex > 移步我pinia文章】
1、安装
npm install vuex@next --save
2、createStore 创建、封装 vuex4 store模块,并在main.ts/js 中引用。
/src/store/index.ts
// 在src文件夹下新建store文件夹,所有相关的状态管理封装都在store文件夹下
import { createStore } from 'vuex'
import m1 from './m1'
// 创建一个新的 store 实例
export const store = createStore({
modules:{
m1
},
state () {
return {
vuexText: 'vuex--Text'
}
},
getters:{
getters_vuexText(state){
return state.vuexText + '++++额外的getters_vuexText'
},
getters_fn(state){
return ()=>{
return state.vuexText + '*-*-*-*-* 这是vuex函数式返回'
}
}
},
mutations: {
increment (state) {
// this.$store.commit('increment')
// 变更状态
console.log(state);
state.vuexText = '更改数据后的vuexText'
}
},
actions: {
increment2 ({commit}) {
commit('increment')
}
}
})
/src/store/m1.ts
export default {
namespaced: true, // moidules 模块开启 `命名空间` < 注意这个词,后面会出现!!
state(){
return {
m1Text: ' m1Text'
}
},
getters:{
getters_m1Text(state){
return state.m1Text + 'modules 的 getters'
},
},
mutations: {
moduleMu1 (state,data) { // 就接收2个参数
// console.log(data,'commit()第二个参数将作为实参传递到这');
state.m1Text = '更改数据后的 m1Text'
}
},
actions: {
moduleAc1 ({commit},data) { // 就接收2个参数
// console.log(data,'dispatch()第二个参数将作为实参传递到这');
commit('moduleMu1')
}
}
}
/src/main.ts
import {store} from './store/index' // 引入vuex4 封装好的 store 模块
import { createApp } from 'vue'
import App from './App.vue'
const app = createApp(App)
app.use(store) // use() 挂挂载 store 模块
// .....
?3、使用:
(仅讲述在 setup 语法糖下的使用方法,在options api内的使用方法同vue2一样,不讲这一块)
<template>
<div>createStore 里的 modules 里模块下的使用</div>
<div>模块内 state 的引用: {{ store.state.m1.m1Text }}</div>
<!-- <div>模块内 getters 的引用: {{ store.getters.getters_m1Text }}</div> -->
<div>开启模块 `命名空间` getters 的引用: {{ store.getters['m1/getters_m1Text'] }}</div>
<div>非 createStore 里的 modules 里模块下的使用</div>
<div>vuex数据的方式之一 》》》 {{store.state.vuexText}}</div>
<div>vuex数据的方式之一 》》》 {{store.getters.getters_fn()}}</div>
<div>vuex数据的方式之一 》》》 {{store.getters.getters_vuexText}}</div>
</template>
<script lang="ts" setup>
import { useStore } from 'vuex'
const store = useStore()
console.log(store,"vuex - useStore()的返回值");
// 调用 actions 就store.dispatch("action2") // 接收2个参数,第一个是方法名,第二个是传递的数据
// 调用 mutations 就store.commit("mutations2") // 接收2个参数,第一个是方法名,第二个是传递的数据
setTimeout(() => {
// store.commit('increment')
// store.dispatch('moduleAc1') // 默认情况下,模块内部的 action 和 mutation 仍然是注册在全局命名空间
store.dispatch('m1/moduleAc1',{ amount: 10 }) // 开启模块 `命名空间` 后调用规则: '[模块名]/[actions里的方法名]'
// store.commit('m1/moduleMu1')
}, 3000);
</script>
系统 提示要我多水下行数。。
系统 提示要我多水下行数。。
系统 提示要我多水下行数。。
系统 提示要我多水下行数。。
系统 提示要我多水下行数。。
系统 提示要我多水下行数。。
系统 提示要我多水下行数。。
系统 提示要我多水下行数。。
系统 提示要我多水下行数。。
系统 提示要我多水下行数。。
系统 提示要我多水下行数。。
系统 提示要我多水下行数。。
系统 提示要我多水下行数。。
系统 提示要我多水下行数。。
系统 提示要我多水下行数。。
|