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


    本文章目的:快速上手vue3 的 vuex ,并了解各个常用的功能。

    不常用的和非必要的在此不进行讲述,需要更完善自己的请查看官网。

    【建议使用Pinia代替vuex > 移步我pinia文章】


    1、安装

    npm install vuex@next --save

    2、createStore 创建、封装 vuex4 store模块,并在main.ts/js 中引用。

    1. /src/store/index.ts
    2. // 在src文件夹下新建store文件夹,所有相关的状态管理封装都在store文件夹下
    3. import { createStore } from 'vuex'
    4. import m1 from './m1'
    5. // 创建一个新的 store 实例
    6. export const store = createStore({
    7. modules:{
    8. m1
    9. },
    10. state () {
    11. return {
    12. vuexText: 'vuex--Text'
    13. }
    14. },
    15. getters:{
    16. getters_vuexText(state){
    17. return state.vuexText + '++++额外的getters_vuexText'
    18. },
    19. getters_fn(state){
    20. return ()=>{
    21. return state.vuexText + '*-*-*-*-* 这是vuex函数式返回'
    22. }
    23. }
    24. },
    25. mutations: {
    26. increment (state) {
    27. // this.$store.commit('increment')
    28. // 变更状态
    29. console.log(state);
    30. state.vuexText = '更改数据后的vuexText'
    31. }
    32. },
    33. actions: {
    34. increment2 ({commit}) {
    35. commit('increment')
    36. }
    37. }
    38. })
    1. /src/store/m1.ts
    2. export default {
    3. namespaced: true, // moidules 模块开启 `命名空间` < 注意这个词,后面会出现!!
    4. state(){
    5. return {
    6. m1Text: ' m1Text'
    7. }
    8. },
    9. getters:{
    10. getters_m1Text(state){
    11. return state.m1Text + 'modules 的 getters'
    12. },
    13. },
    14. mutations: {
    15. moduleMu1 (state,data) { // 就接收2个参数
    16. // console.log(data,'commit()第二个参数将作为实参传递到这');
    17. state.m1Text = '更改数据后的 m1Text'
    18. }
    19. },
    20. actions: {
    21. moduleAc1 ({commit},data) { // 就接收2个参数
    22. // console.log(data,'dispatch()第二个参数将作为实参传递到这');
    23. commit('moduleMu1')
    24. }
    25. }
    26. }
    1. /src/main.ts
    2. import {store} from './store/index' // 引入vuex4 封装好的 store 模块
    3. import { createApp } from 'vue'
    4. import App from './App.vue'
    5. const app = createApp(App)
    6. app.use(store) // use() 挂挂载 store 模块
    7. // .....

     3、使用:

    (仅讲述在 setup 语法糖下的使用方法,在options api内的使用方法同vue2一样,不讲这一块)

    1. <template>
    2. <div>createStore 里的 modules 里模块下的使用div>
    3. <div>模块内 state 的引用: {{ store.state.m1.m1Text }}div>
    4. <div>开启模块 `命名空间` getters 的引用: {{ store.getters['m1/getters_m1Text'] }}div>
    5. <div>非 createStore 里的 modules 里模块下的使用div>
    6. <div>vuex数据的方式之一 》》》 {{store.state.vuexText}}div>
    7. <div>vuex数据的方式之一 》》》 {{store.getters.getters_fn()}}div>
    8. <div>vuex数据的方式之一 》》》 {{store.getters.getters_vuexText}}div>
    9. template>
    10. <script lang="ts" setup>
    11. import { useStore } from 'vuex'
    12. const store = useStore()
    13. console.log(store,"vuex - useStore()的返回值");
    14. // 调用 actions 就store.dispatch("action2") // 接收2个参数,第一个是方法名,第二个是传递的数据
    15. // 调用 mutations 就store.commit("mutations2") // 接收2个参数,第一个是方法名,第二个是传递的数据
    16. setTimeout(() => {
    17. // store.commit('increment')
    18. // store.dispatch('moduleAc1') // 默认情况下,模块内部的 action 和 mutation 仍然是注册在全局命名空间
    19. store.dispatch('m1/moduleAc1',{ amount: 10 }) // 开启模块 `命名空间` 后调用规则: '[模块名]/[actions里的方法名]'
    20. // store.commit('m1/moduleMu1')
    21. }, 3000);
    22. script>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • 相关阅读:
    Swift 5.7发布!2022年9月12日
    Spring Boot 4 实现JwtToken验证(重点)&&实现后端API(重点)&&前端:实现注册与登录模块(略)
    2022谷粒商城学习笔记(十六)检索服务
    百度百科怎么快速创建人物词条?教你几招技巧!
    Linux基础-LVM逻辑卷管理
    Redis
    AbstractQueuedSynchronizer之AQS
    在Ferora35中安装oracle-database-xe-21c
    DragonEnglish——个人英语学习项目
    orangePi与wiringPi库(二):元器件使用_orangepi wiring-CSDN博客
  • 原文地址:https://blog.csdn.net/lijiahui_/article/details/126937382