【前端知识】Vue组件Vuex详细介绍

news2024/11/18 10:16:46

vuex组件介绍

    • 概述
      • 一、Vuex的核心概念
      • 二、Vuex的工作原理
      • 三、Vuex的优点
      • 四、Vuex的使用场景
      • 五、Vuex的使用步骤
    • 如何使用
      • 1. 安装 Vuex
      • 2. 创建 Store
      • 3. 在 Vue 实例中使用 Store
      • 4. 在组件中使用 Vuex
      • 5. 使用辅助函数简化代码

概述

Vuex是专门为Vue.js应用程序开发设计的状态管理模式,它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。以下是对Vuex的详细介绍:

一、Vuex的核心概念

  1. state:用于存储应用中需要共享的状态,这些状态在Vue组件中可以通过this.$store.state来访问。
  2. getters:可以看作是store的计算属性,用于从state中派生出一些状态,这些状态可以像访问组件的计算属性一样通过this.$store.getters来访问。
  3. mutations:是同步函数,用于修改state中的状态。在组件中,我们通过this.$store.commit(‘mutationName’, payload)来调用mutation,从而修改状态。
  4. actions:包含异步操作,它不能直接修改state,但可以通过提交mutation来间接修改state。
  5. modules:Vuex允许我们将store分割成模块(module),每个模块拥有自己的state、mutation、action、getter,甚至是嵌套子模块——从上至下进行同样方式的分割。

二、Vuex的工作原理

Vuex是Vue.js应用程序开发的状态管理模式和库,它为Vue应用程序提供了一个集中式的存储机制,用于管理应用程序的所有组件的状态。Vuex的工作原理主要围绕其几个核心概念进行,这些核心概念包括State(状态)、Getter(获取器)、Mutation(突变)、Action(动作)和Module(模块)。以下是Vuex工作原理的详细解释:

  1. State(状态)

    • State是Vuex中的核心,用于存储应用程序的数据。它是一个响应式的对象,当State中的数据发生变化时,依赖于这些数据的Vue组件会自动更新。
    • 所有的组件都可以访问State中的数据,这使得多个组件之间可以共享状态。
  2. Getter(获取器)

    • Getter类似于Vue组件中的计算属性,它允许从State中派生出一些衍生的状态。
    • Getter可以对State中的数据进行处理和计算,然后将结果暴露给组件使用。
  3. Mutation(突变)

    • Mutation是Vuex中用于修改State的唯一途径。它必须同步执行,以确保状态变更是可追踪的。
    • 每个Mutation都有一个特定的名称(称为type)和一个操作函数,该函数接收State作为第一个参数,并对其进行修改。
    • 要执行一个Mutation,需要使用commit方法,并传入相应的type和操作参数。
  4. Action(动作)

    • Action用于处理异步操作和复杂的业务逻辑。它可以包含异步操作,并可以触发多个Mutation。
    • Action通过调用dispatch方法来执行,并可以接收参数。
    • 在Action中,可以使用context对象来访问State、提交Mutation和调用其他Action。
  5. Module(模块)

    • 为了更好地组织和拆分大型的应用程序,Vuex允许将State、Getter、Mutation和Action划分为模块。
    • 每个模块都有自己的State、Getter、Mutation和Action,并且可以被嵌套和组合。
    • 这使得Vuex的结构更加清晰,易于管理和维护。

Vuex的工作流程大致如下:

  • Vue组件接收交互行为(如用户的点击或输入),然后调用dispatch方法触发Action相关处理。
  • Action可以执行一些异步或同步操作,并根据不同的情况调用commit方法提交Mutation。
  • Mutation接收到commit请求后,对State进行修改。
  • 当State中的数据发生变化时,依赖于这些数据的Vue组件会自动更新,从而重新渲染页面。

此外,Vuex还提供了mapState、mapGetters、mapActions和mapMutations等辅助函数,这些函数可以帮助开发者在Vue组件中更方便地访问和使用Vuex的状态管理功能。

总的来说,Vuex通过集中式存储管理应用程序的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化,从而简化了应用程序的状态管理,提高了代码的可维护性和复用性。

三、Vuex的优点

  1. 集中式管理:Vuex将所有组件的共享状态集中管理,避免了多个组件间的直接通信,使得状态管理更加清晰和可维护。
  2. 响应式:Vuex的状态是响应式的,当状态发生变化时,依赖于这些状态的组件会自动重新渲染。
  3. 预测性:由于Vuex的状态变化是单向的,且必须通过mutation来进行,因此状态的变化变得可预测。
  4. 调试工具:Vuex提供了强大的调试工具,可以方便地查看状态的变化历史、追踪错误的来源等。

四、Vuex的使用场景

  1. 多组件共享数据:当多个组件需要共享数据时,可以使用Vuex来存储这些数据,以避免组件间的直接通信和数据冗余。
  2. 复杂的状态管理:当应用的状态变得复杂时,使用Vuex可以更方便地管理这些状态,提高代码的可维护性和可读性。
  3. 异步操作:当需要进行异步操作时,可以使用actions来处理这些操作,然后再通过mutation来修改状态。

五、Vuex的使用步骤

  1. 安装Vuex:使用npm或yarn来安装Vuex。
  2. 创建store:在项目的src目录下创建一个store文件夹,并在其中创建一个index.js文件来定义Vuex的store。
  3. 配置store:在index.js文件中,引入Vue和Vuex,并使用Vue.use(Vuex)来安装Vuex插件。然后,定义一个包含state、getters、mutations和actions的对象,并使用new Vuex.Store()来创建store实例。
  4. 在Vue实例中使用store:在main.js文件中,引入刚刚创建的store实例,并在创建Vue实例时将store作为选项传入。
  5. 在组件中使用Vuex:在Vue组件中,可以通过this. s t o r e 来访问 V u e x 的 s t o r e ,并使用 t h i s . store来访问Vuex的store,并使用this. store来访问Vuexstore,并使用this.store.state、this. s t o r e . g e t t e r s 、 t h i s . store.getters、this. store.gettersthis.store.commit和this.$store.dispatch等方法来访问状态和进行状态变更。

总的来说,Vuex是Vue.js应用中状态管理的强大工具,它通过集中式存储管理、可预测的状态变化、组件间的解耦以及方便的调试工具等特性,为开发者提供了高效、清晰的状态管理方案。

如何使用

Vuex 是 Vue.js 应用程序的状态管理模式和库。它主要用于管理应用中多个组件共享的状态,并以一种可预测的方式改变这些状态。以下是 Vuex 使用的基本介绍:

1. 安装 Vuex

首先,你需要在你的 Vue.js 项目中安装 Vuex。你可以使用 npm 或 yarn 来完成这个操作:

npm install vuex --save
# 或者
yarn add vuex

2. 创建 Store

安装完成后,你需要创建一个 Vuex store。这通常是在你的项目的 src 目录下创建一个 store 文件夹,并在其中创建一个 index.js 文件。

// src/store/index.js
import Vue from 'vue';
import Vuex from 'vuex';

Vue.use(Vuex);

export default new Vuex.Store({
  state: {
    // 定义状态
    count: 0
  },
  mutations: {
    // 定义同步变更状态的方法
    increment(state) {
      state.count++;
    }
  },
  actions: {
    // 定义异步操作或复杂逻辑
    incrementAsync({ commit }) {
      setTimeout(() => {
        commit('increment');
      }, 1000);
    }
  },
  getters: {
    // 定义从 state 中派生出的一些状态
    count: state => state.count,
    // 或者使用 mapState 辅助函数
    // ...mapState(['count'])
  },
  // 可以将 store 分割成模块(module)。每个模块拥有自己的 state、mutation、action、getter,
  // 甚至是嵌套子模块。
  modules: {
    // ...
  }
});

3. 在 Vue 实例中使用 Store

接下来,你需要在你的 Vue 实例中引入并使用这个 store。这通常是在 src/main.js 文件中完成的。

// src/main.js
import Vue from 'vue';
import App from './App.vue';
import store from './store';

Vue.config.productionTip = false;

new Vue({
  store,
  render: h => h(App),
}).$mount('#app');

4. 在组件中使用 Vuex

现在,你可以在你的 Vue 组件中使用 Vuex 了。你可以通过 this.$store.state 来访问状态,通过 this.$store.commit 来提交 mutation,通过 this.$store.dispatch 来分发 action,以及通过 this.$store.getters 来访问 getter。

<template>
  <div>
    <p>{{ count }}</p>
    <button @click="increment">Increment</button>
    <button @click="incrementAsync">Increment Async</button>
  </div>
</template>

<script>
export default {
  computed: {
    // 使用 mapState 辅助函数将 store 中的状态映射到组件的计算属性中
    count() {
      return this.$store.state.count;
      // 或者使用 mapState(['count']) 然后在 computed 中直接展开
    }
  },
  methods: {
    increment() {
      this.$store.commit('increment');
    },
    incrementAsync() {
      this.$store.dispatch('incrementAsync');
    }
  }
};
</script>

5. 使用辅助函数简化代码

Vuex 提供了一些辅助函数,如 mapStatemapGettersmapMutationsmapActions,它们可以帮助你简化组件中的代码。

<script>
import { mapState, mapMutations, mapActions } from 'vuex';

export default {
  computed: {
    // 使用 mapState 将 store 中的状态映射到组件的计算属性中
    ...mapState(['count']),
  },
  methods: {
    // 使用 mapMutations 将 store 中的 mutation 映射到组件的方法中
    ...mapMutations(['increment']),
    // 使用 mapActions 将 store 中的 action 映射到组件的方法中
    ...mapActions(['incrementAsync'])
  }
};
</script>

通过以上步骤,你就可以在你的 Vue.js 应用中使用 Vuex 来管理状态了。Vuex 使得状态管理变得集中、可预测和易于调试,是构建大型 Vue.js 应用的重要工具。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2242750.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

操作系统进程管理实验

父子进程 用系统调用fork()函数实现子进程的创建&#xff0c;熟悉进程创建的执行过程。 #include <stdio.h> #include <stdlib.h> #include <unistd.h>int main() {// 打印主进程的 PIDprintf("hello, world (pid: %d)\n", (int)getpid());// 创…

DB Type

P位 p 1时段描述符有效&#xff0c;p 0时段描述符无效 Base Base被分成了三个部分&#xff0c;按照实际拼接即可 G位 如果G 0 说明描述符中Limit的单位是字节&#xff0c;如果是G 1 &#xff0c;那么limit的描述的单位是页也就是4kb S位 S 1 表示代码段或者数据段描…

获取当前程序运行时的栈大小[C语言]

废话前言 一晃已经毕业了4年&#xff0c;也在某个时间点&#xff0c;从面试者转变成了面试官。 进行第一次面试的时候&#xff0c;我好像比候选人还慌张&#xff0c;压根不知道问什么&#xff0c;好在是同行业&#xff0c;看着简历问了一些协议内容以及模块设计思路&#xff0…

新160个crackme - 098-DueList.4

运行分析 需破解Name和Code PE分析 ASM汇编程序&#xff0c;32位&#xff0c;无壳 静态分析&动态调试 ida搜索找到关键字符串 ida动态调试&#xff0c;逻辑如上 算法分析 Name concealstr_1 SU7CSJKF09NCSDO9SDF09SDRLVK7809S4NF str_2 A1LSK2DJF4HGP3QWO5EIR6UTYZ8MXN…

ETH钱包地址如何获取 如何购买比特币

首先我们要先注册一个交易所 Gate.io&#xff08;推荐&#xff09;: 点我注册 1、注册很简单&#xff0c;通过手机号就可以进行注册了。 2、获取ETH钱包地址 注册好之后&#xff0c;如图所示&#xff0c;点击“统一账户” 3、通过搜索栏搜索ETH&#xff0c;如下图所示 4、点…

【HOT100第五天】搜索二维矩阵 II,相交链表,反转链表,回文链表

240.搜索二维矩阵 II 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 先动手写写最简单方法&#xff0c;二重循环。 class Solution { public:bool searchMa…

.NET 9与C# 13革新:新数据类型与语法糖深度解析

记录&#xff08;Record&#xff09;类型 使用方式&#xff1a; public record Person(string FirstName, string LastName); 适用场景&#xff1a;当需要创建不可变的数据结构&#xff0c;且希望自动生成 GetHashCode 和 Equals 方法时。不适用场景&#xff1a;当数据结构需…

冠层四流近似模型的发展历史

1. Kunbelka-Munk theory This is the earlist model using a two-stream approximation d I d z − ( k s ) I s J d J d z ( k s ) J − s I \begin{aligned} &\frac{dI}{dz} -(ks)IsJ\\ &\frac{dJ}{dz} (ks)J - sI \end{aligned} ​dzdI​−(ks)IsJdzdJ​(…

MySQL-关联查询和子查询

目录 一、笛卡尔积 二、表连接 1、内部连接 1.1 等值连接 1.2 非等值连接 2、外部链接 2.1 左外连接-LEFT JOIN 2.2 右外连接-RIGHT JOIN 2.3 全关联-FULL JOIN/UNION 三、子查询 1、嵌套子查询 2、相关子查询 3、insert和select语句添加数据 4、update和select语…

云计算虚拟化-kvm创建虚拟机

作者介绍&#xff1a;简历上没有一个精通的运维工程师。希望大家多多关注作者&#xff0c;下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 虚拟化&#xff0c;简单来说就是把一台服务器/PC电脑&#xff0c;虚拟成多台独立的虚拟机&#xff0c;每台虚拟机之间相互隔…

计算机编程中的设计模式及其在简化复杂系统设计中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 计算机编程中的设计模式及其在简化复杂系统设计中的应用 计算机编程中的设计模式及其在简化复杂系统设计中的应用 计算机编程中的…

编程考古-计算机发展(中)

晶体管计算机时代 尽管真空管技术标志着计算机步入了现代化的门槛&#xff0c;但其固有的局限性——庞大的体积、高昂的能耗、频繁的故障以及不菲的成本——极大地阻碍了其普及与实际应用。 晶体管的早期 Point-contact transistor 点接触晶体管 1947年&#xff0c;贝尔实验…

vue2+3 —— Day5/6

自定义指令 自定义指令 需求&#xff1a;当页面加载时&#xff0c;让元素获取焦点&#xff08;一进页面&#xff0c;输入框就获取焦点&#xff09; 常规操作&#xff1a;操作dom “dom元素.focus()” 获取dom元素还要用ref 和 $refs <input ref"inp" type&quo…

报错 No available slot found for the embedding model

报错内容 Server error: 503 - [address0.0.0.0:12781, pid304366] No available slot found for the embedding model. We recommend to launch the embedding model first, and then launch the LLM models. 目前GPU占用情况如下 解决办法: 关闭大模型, 先把 embedding mode…

Maven 构建项目

Maven 是一个项目管理和构建工具&#xff0c;主要用于 Java 项目。它简化了项目的构建、依赖管理、报告生成、发布等一系列工作。 构建自动化&#xff1a;Maven 提供了一套标准化的构建生命周期&#xff0c;包括编译、测试、打包、部署等步骤&#xff0c;通过简单的命令就可以执…

【C++笔记】C++三大特性之多态

【C笔记】C三大特性之多态 &#x1f525;个人主页&#xff1a;大白的编程日记 &#x1f525;专栏&#xff1a;C笔记 文章目录 【C笔记】C三大特性之多态前言一.多态1.1 多态的概念1.2 虚函数1.3 虚函数的重写/覆盖1.4 多态的定义及实现 二.虚函数重写的⼀些其他问题2.1 协变(…

【项目实战】基于 LLaMA-Factory 通过 LoRA 微调 Qwen2

【项目实战】基于 LLaMAFactory 通过 LoRA 微调 Qwen2 一、项目介绍二、环境准备1、环境准备2、安装LLaMa-Factory3、准备模型数据集3.1 模型准备3.2 数据集准备 三、微调1、启动webui2、选择参数3、训练 四、测试五、总结 一、项目介绍 LLaMA-Factory是一个由北京航空航天大学…

内容占位符:Kinetic Loader HTML+CSS 使用CSS制作三角形原理

内容占位符 前言 随着我们对HTML和CSS3的学习逐渐深入&#xff0c;相信大家都已经掌握了网页制作的基础知识&#xff0c;包括如何使用HTML标记构建网页结构&#xff0c;以及如何运用CSS样式美化页面。为了进一步巩固和熟练这些技能&#xff0c;今天我们一起来完成一个有趣且实…

SpringSecurity 鉴权认证入门讲解

​ Spring Security 是 Spring 家族中的一个安全管理框架。相比与另外一个安全框架Shiro&#xff0c;它提供了更丰富的功能&#xff0c;社区资源也比Shiro丰富。 ​ 一般来说中大型的项目都是使用SpringSecurity 来做安全框架。小项目有Shiro的比较多&#xff0c;因为相比与Sp…

【插件】多断言 插件pytest-assume

背景 assert 断言一旦失败&#xff0c;后续的断言不能被执行 有个插件&#xff0c;pytest-assume的插件&#xff0c;可以提供多断言的方式 安装 pip3 install pytest-assume用法 pytest.assume(表达式,f’提示message’) pytest.assume(表达式,f‘提示message’) pytest.ass…