• Vue.js入门教程(七)


    目录

    状态管理模式Vuex

    1:简介

    2:安装

    3:配置

    核心概念说明

    多组件数据通讯

    计算属性 getters


    官网:https://vuex.vuejs.org/zh

    状态管理模式Vuex

    1:简介

    Vuex 是集中式存储管理应用的所有组件的状态(数据)。可实现任意组件之间的通讯。

    2:安装

    npm install vuex

    npm install vuex@3 --save                // vue2.x 安装此版本 

    3:配置

    新建 src/store/index.js 状态文件

    配置状态文件

    配置 main.js 

    核心概念说明

    • state:状态树,用一个对象就包含了全部的应用层级状态。作为一个“唯一数据源”而存在。这也意味着,每个应用将仅仅包含一个 store 实例。单一状态树让我们能够直接地定位任一特定的状态片段。
    • mutations:更改 Vuex 的 store 中的状态的唯一方法是提交 mutation。Vuex 中的 mutation 非常类似于事件:每个 mutation 都有一个字符串的 事件类型 (type) 和 一个 回调函数 (handler)。这个回调函数就是我们实际进行状态更改的地方。
    • actions: 类似于 mutation,不同在于:action 提交的是 mutation,而不是直接变更状态。action 可以包含任意异步操作。

    多组件数据通讯

    需求:有一个变量 count,通过使用 vuex 更改这个变量的值

    代码

    src/store/index.js

    1. import Vue from 'vue';
    2. import Vuex from 'vuex';
    3. Vue.use(Vuex);
    4. const store = new Vuex.Store({
    5. actions: {
    6. // 5
    7. // 自定义事件mySj,通过 $store.dispatch() 触发该事件执行
    8. // context: 用于连接 action 和 mutation 的上下文
    9. // value: $store.dispatch() 第二个参数传递过来的数据
    10. mySj(context, value) {
    11. // 提交自定义mutation事件 myMutation
    12. context.commit("myMutation", value);
    13. }
    14. },
    15. mutations: {
    16. // 6
    17. // actions 中的 commit 执行会触发指定的事件函数
    18. // state: state对象,拿到此对象就可以更改state对象中的数据
    19. // value: 传递过来的数据
    20. myMutation(state, value) {
    21. state.count += value;
    22. }
    23. },
    24. state: {
    25. count: 0 // 1:在 vuex 定义一个公共变量 count,多组件中使用的相同变量,可以放在此处用于实现多组件数据通讯
    26. }
    27. })
    28. export default store;

    xxx.vue 组件 vue2版本写法

    1. <script>
    2. export default {
    3. methods: {
    4. add() {
    5. // 4:vuex提供的异步操作api,用于触发 action 事件,参数1:自定义事件名称mySj, 参数2:要传递的数据
    6. this.$store.dispatch('mySj', 1);
    7. // vuex提供的同步操作api,用于触发 mutation 事件,参数1:自定义事件名称myMutation, 参数2:要传递的数据
    8. // this.$store.commit('myMutation', 1);
    9. }
    10. },
    11. /**
    12. * 相当于起别名
    13. computed:{
    14. count() {
    15. return this.$store.state.count
    16. }
    17. }
    18. */
    19. }
    20. script>

    xxx.vue 组件 vue3版本写法

    1. // 这个是在 传值的时候这样使用
    2. // 重点:取值的时候如下
    3. <template>
    4. {{current.name}}
    5. template>
    6. <script setup>
    7. import { computed, reactive } from "vue"
    8. import { useStore } from 'vuex'
    9. // 这里一定一定一定要使用 reactive
    10. const store = reactive(useStore());
    11. // 计算属性,动态更新数据
    12. let current = computed(() => {
    13. return store.state.tab.currentMenu;
    14. })
    15. script>

    计算属性 getters

            定义

    对 store 中 state 数据进行加工

            配置

    getters: {
        changeCount(state) {        // 自定义处理数据函数
            return state.count * 2;
        },
    }

            读取

    this.$store.getters.changeCount;                // xxx.vue中获取处理后的数据

  • 相关阅读:
    .NET微服务系统迁移至.NET6.0的故事
    ABP框架之——数据访问基础架构
    sqlserver6
    刚爆火就下线的 ZAO 换脸,背后是另一场技术人的狂欢
    SSM+科技馆预约系统 毕业设计-附源码182154
    【校招VIP】 java开源框架之mq
    bed has inconsistent naming convention for record
    RAID磁盘阵列管理
    离线安装mysql
    实现基于 GitLab 的数据库 CI/CD 最佳实践
  • 原文地址:https://blog.csdn.net/a1053765496/article/details/126817238