【vue3: vuex4 状态管理库】使用&讲解

45 篇文章 6 订阅
10 篇文章 0 订阅

本文章目的:快速上手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>

系统 提示要我多水下行数。。

系统 提示要我多水下行数。。

系统 提示要我多水下行数。。

系统 提示要我多水下行数。。

系统 提示要我多水下行数。。

系统 提示要我多水下行数。。

系统 提示要我多水下行数。。

系统 提示要我多水下行数。。

系统 提示要我多水下行数。。

系统 提示要我多水下行数。。

系统 提示要我多水下行数。。

系统 提示要我多水下行数。。

系统 提示要我多水下行数。。

系统 提示要我多水下行数。。

系统 提示要我多水下行数。。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值