首页 > 其他分享 >Vue3的学习---10

Vue3的学习---10

时间:2024-08-27 19:25:41浏览次数:7  
标签:10 createStore getters --- state num Vue3 Vuex store

10. Vuex

10.1 Vuex简介

10.1.1 Vuex概述

Vuex 是 Vue.js 应用程序的状态管理模式 + 库。它作为中央存储库,用于管理应用程序中所有组件的状态,并以可预测的方式进行状态变更。Vuex 的设计理念是基于 Flux 架构,主要由以下几个核心概念组成:

  1. State(状态)
    • 存储应用程序的所有状态数据。
    • 单一状态树,即一个对象包含了所有应用层级的状态。
  2. Getter(获取器)
    • 从 store 中的 state 中派生出一些状态,例如对列表进行过滤并计数。
    • 类似于 Vue 组件中的计算属性。
  3. Mutation(变更)
    • 唯一可以更改 state 的方法。
    • 必须是同步函数。
  4. Action(动作)
    • 类似于 mutation,但可以包含任意异步操作。
    • 提交的是 mutation,而不是直接变更状态。
  5. Module(模块)
    • 将 store 分割成模块,每个模块拥有自己的 state、mutation、action、getter,甚至是嵌套子模块。

10.1.2 如何在Vue-cli中引入Vue

  1. 在搭建Vue-cli工程时,选择添加Vuex模块,就可以在工程中引用Vuex模块了。

  2. 在src文件夹中会出现一个store文件夹,此文件夹中有一个index.js文件,这就是Vuex模块的js文件。

    import { createStore } from 'vuex'
    
    export default createStore({
      state: {
      },
      getters: {
      },
      mutations: {
      },
      actions: {
      },
      modules: {
      }
    })
    

10.2 Vuex的使用

10.2.1 state的使用

  1. 在store文件夹中的index.js文件中写入如下代码

    import { createStore } from 'vuex'
    
    export default createStore({
      state: {
        num: 100
      },
      getters: {
      },
      mutations: {
      },
      actions: {
      },
      modules: {
      }
    })
    
  2. 在两个组件中都添入如下代码

    <template>
      <div>
        <p>{{ $store.state.num }}</p>
      </div>
    </template>
    

10.2.2 getter的使用

  1. 在store文件夹中的index.js文件中写入如下代码

    import { createStore } from 'vuex'
    
    export default createStore({
      state: {
        num: 100
      },
      getters: {
        newNum(state) {
          return state.num + 10
        }
      },
      mutations: {
      },
      actions: {
      },
      modules: {
      }
    })
    
  2. 在两个组件中都添入如下代码

    <template>
      <div>
        <p>{{ $store.getters.newNum }}</p>
      </div>
    </template>
    

10.2.3 mutation的使用

  1. 在store文件夹中的index.js文件中写入如下代码

    import { createStore } from 'vuex'
    
    export default createStore({
      state: {
        num: 100
      },
      getters: {
        newNum(state) {
          return state.num + 10
        }
      },
      mutations: {
        addMethod(state, param) {
          state.num += param
        }
      },
      actions: {
      },
      modules: {
      }
    })
    
  2. 修改HomeView组件中的代码

    <template>
      <div class="home">
        <img alt="Vue logo" src="../assets/logo.png">
        <p>{{ $store.state.num }}</p>
        <p>{{ $store.getters.newNum }}</p>
        <button @click="change">change</button>
      </div>
    </template>
    
    <script>
    export default {
      name: 'HomeView',
      methods: {
        change() {
          // commit就是调用mutations里的方法,第一个参数为方法名,第二个参数为传递的参数
          this.$store.commit('addMethod', 9)
        }
      }
    }
    

10.2.4 action的使用

  1. 在store文件夹中的index.js文件中写入如下代码

    import { createStore } from 'vuex'
    
    export default createStore({
      state: {
        num: 100
      },
      getters: {
        newNum(state) {
          return state.num + 10
        }
      },
      mutations: {
        addMethod(state, param) {
          state.num += param
        }
      },
      actions: {
      },
      modules: {
      }
    })
    
  2. 修改HomeView组件中的代码

    <template>
      <div class="home">
        <img alt="Vue logo" src="../assets/logo.png">
        <p>{{ $store.state.num }}</p>
        <p>{{ $store.getters.newNum }}</p>
        <button @click="change">change</button>
      </div>
    </template>
    
    <script>
    export default {
      name: 'HomeView',
      methods: {
        change() {
          // dispatch是调用actions里的方法,第一个参数为方法名,第二个参数为传递的参数
          this.$store.dispatch('addMethod', 9)
        }
      }
    }
    </script>
    

10.2.5 总结

  1. state:存放全局共享数据。使用形式:$store.state.num
  2. getters:计算属性。使用形式:$store.getters.newnum
  3. mutations:处理同步数据的方法。使用形式:$state.commit('addMethod', 9)
  4. actions:处理异步数据的方法。使用形式:$state.dispatch('addMethod', 9)
    • 先使用$state.commit('addMethod', 9)的方式调用Vuex中的actions
    • actions再使用commit方法调用Vuex中的mutations

标签:10,createStore,getters,---,state,num,Vue3,Vuex,store
From: https://www.cnblogs.com/yishengwanwuzhao/p/18383362

相关文章

  • sqli-labs靶场通关攻略(36-40关)
    第36关(宽字节注入(BypassMySQLRealEscapeString))查数据库?id=-1%df%27%20union%20select%202,database(),3%20--+ 查表?id=-1%df'unionselect1,group_concat(table_name),3frominformation_schema.tableswheretable_schema=database()--+查列?id=-1%df'uni......
  • 第五章习题3-输入两个正整数m和n,求其最大公约数和最小公倍数
     ......
  • 《JavaEE进阶》----1.<JavaEE进阶可以学到什么>
    本篇博客会讲到一、JavaEE进阶学习内容:1.框架的学习:Spring、SpringBoot、SpringMVC、MyBatis2.大项目实践3.源码阅读二、JavaEE简介B/S架构web开发流程web前端开发(了解)web后端开发(重点)三、什么是框架四、学习编程思维方式(重点:学习建议)学完JavaEE你的收获会持续......
  • 《第二十九章 性能优化 - 界面流畅度优化》
    一、引言在Android应用开发中,界面的流畅度直接影响着用户体验。一个卡顿、不流畅的界面可能会导致用户的不满和流失。在这一章中,我们将重点探讨如何通过减少布局层级和避免过度绘制来优化界面流畅度。二、减少布局层级(一)布局层级过多的影响布局层级过多会导致以下问......
  • 《第二十八章:性能优化 - 电量优化》
    一、引言在Android应用开发中,电量优化是提升用户体验、延长设备续航的重要环节。一个电量消耗过高的应用可能会导致用户不满,甚至卸载。在这一章中,我们将重点探讨如何通过合理使用传感器和优化网络请求来降低应用的电量消耗。二、合理使用传感器(一)传感器类型及特点Andr......
  • 基于Java Vue3学生宿舍管理系统
    一、作品包含源码+数据库+设计文档万字+全套环境和工具资源+部署教程二、项目技术前端技术:Html、Css、Js、Vue3、Element-ui数据库:MySQL后端技术:Java、SpringBoot、MyBatis三、运行环境开发工具:IDEA/eclipse数据库:MySQL8.0数据库管理工具:Navicat10以上版本环境配置......
  • 【双一流高校联合支持 | 接受纯综述&实证文章-经济、管理、文化、社会学均可投递 | 毕
    抓住数字经济的发展机遇,推动当前文化旅游产业与经济的深度融合才能不断推进经济大格局。第六届经济管理与文化产业国际学术会议(ICEMCI2024)将继续围绕“经济管理”与“文化产业”两大研究领域展开讨论,旨在为相关研究方向的专家学者及企业发展人士提供一个国际性合作交流平台。......
  • 基于nodejs+vue北京冬奥会志愿者管理系统[程序+论文+开题]-计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着2022年北京冬奥会的日益临近,志愿者作为赛事成功举办不可或缺的重要力量,其管理效率与服务质量直接关系到冬奥会的整体形象与国际影响力。传统的人工管理......
  • 基于Java Vue3学生宿舍管理系统
    一、作品包含源码+数据库+设计文档万字+全套环境和工具资源+部署教程二、项目技术前端技术:Html、Css、Js、Vue3、Element-ui数据库:MySQL后端技术:Java、SpringBoot、MyBatis三、运行环境开发工具:IDEA/eclipse数据库:MySQL8.0数据库管理工具:Navicat10以上版本环境配置......
  • 基于nodejs+vue北朝艺术博物馆文物在线观赏系统[程序+论文+开题]-计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着数字时代的到来,互联网技术的飞速发展正深刻改变着人们的生活方式与文化体验。北朝艺术,作为中国古代文化艺术的重要组成部分,其丰富的历史底蕴与艺术价值......