三、Vuex是什么?Vuex详解

news2024/9/22 1:00:29

什么是Vuex

在理解Vuex之前,首先需要理解我们为什么要使用它?它解决了什么问题?
为什么要使用它
在Vue开发中,我们常常会用到组件直接的传值、通讯。有父子通讯,兄弟组件通讯…但是传参对于多层嵌套就显得非常繁琐,代码维护也会非常麻烦。
因此我们需要一个工具,能够处理这种情况。
它解决了什么问题
Vuex就是这样一个工具,它把组件共享状态抽取出来以一个全局单例模式管理,把共享的数据函数放进vuex中,任何组件都可以进行使用。
官方的解释是:Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式 + 库。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。

那我们什么时候该使用它呢?
Vuex帮助我们管理共享状态,通过共享状态可以实现不同组件之间数据的共享。但是同时引入了更多的框架和概念。
如果我们需要开发中大型单页应用,需要用到较多组件传值,需要考虑如何更好地在组件外部管理状态,我们通常考虑使用Vuex。
但是如果我们只需要开发简单的单页应用,最好不要使用 Vuex,一个简单的 store 模式就足够了。

Vue项目中,Vuex安装和配置

第一种安装方式:
在vue-cli脚手架搭建时,如果我们选择手动创建,可以手动选择安装vuex插件,成功搭建vue工程后,vuex便被自动安装了
在这里插入图片描述
通过该方式,vue-cli初始化创建时,会自动配置好,无需再进行手动配置

第二种安装方式:

如果当前项目中,没有安装Vuex,也可以通过npm进行安装

npm install vuex@next --save

配置:
在工程的src目录下,新建store文件夹->新建index.js,index.js内容如下(配置的Store对象,是vuex的核心对象,它记录了整个vue应用的数据状态以及操作数据的方式)。

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
  },
  getters: {
  },
  mutations: {
  },
  actions: {
  },
  modules: {
  }
})

随后在工程的入口文件main.js中引入刚刚的配置文件即可。
在这里插入图片描述

Vue的状态详解与用法

vuex中一共有五个状态 State、Getter、Mutation、Action、Module。

1.State

state提供唯一的公共数据源,所有共享的数据统一放到store的state进行储存,可以看做是Vue存储全局变量的容器。
在vuex中state中定义数据,可以在任何组件中进行调用。

import Vue from 'vue'
import Vuex from 'vuex'
 
Vue.use(Vuex)
export default new Vuex.Store({
  //公共数据源,相当于data
  state: {
    name:"小明",
    age:18,
  },
})

使用方法:
方法一:
在标签中直接使用:

<span>{{$store.state.name}}</span>
<span>{{$store.state.age}}</span>

方法二:
在vue的script下,直接使用 this.$store.state.name调用

方法三:
1.从vuex中按需导入mapstate函数:

import { mapState } from "vuex";

2.在computed中引入store数据(当前组件需要的全局数据,映射为当前组件computed属性)

computed:{
    ...mapState(["name","age"])
  },

3.页面上使用

<span>{{name}}</span>
<span>{{age}}</span>

2.Mutation

Mutation简单来说是用来修改store的数据的。这是vuex提供的唯一更改store的属性。如图,提供了一个changeAge的方法修改age
在这里插入图片描述
使用方法
方法一:
使用commit触发Mutation操作。
在Vue页面组件中:

methods:{
	setAge(){
	  this.$store.commit("changeAge",10)     //年龄改成10
	}
}

方法二
使用辅助函数进行操作,具体方法同上
在这里插入图片描述

methods: {
    ...mapMutations(["changeAge"]),
    setAge(){
      this.changeAge(10)     //年龄改成10
    }
    //setAge(){
	//   this.$store.commit("changeAge",10)     //年龄改成10
	// }
  }

3.Action

Action是和Mutation相似的,也是更改store的值,但是是异步操作方法,一般不用Mutation 异步操作,若要进行异步操作,使用Action
如图,提供了一个异步asyncChangeAge的方法修改age
在这里插入图片描述
使用方法:
方法一:

methods: {
    setAge(){
	    this.$store.dispatch("asyncChangeAge",10)     //年龄改成10
	  }
  }

方法二:
使用辅助函数

methods: {
    ...mapActions(["asyncChangeAge"]),
    setAge(){
	    this.asyncChangeAge(10)     //年龄改成10
	  }
    // setAge(){
	  //   this.$store.dispatch("asyncChangeAge",10)     //年龄改成10
	  // }
  }

4. Getter

如果说state通过计算属性获取的数据,我们要经过一定的操作(比如排序),那么在Getter中我们就可以提供这种操作。使得我们获取的state达到我们的需求。

它的本质就是对state进行过滤。

const store = new Vuex.Store({
    state:{ 
        todoList:[{ 
            id: 1,
            text: 'do something1',
            isDo: true
        },{ 
            id: 2,
            text: 'do something2',
            isDo: false
        }]
    },
    getters:{ 
        doneTodos: funciton(state){ 
            return state.todoList.map(item=>item.isDo == true)
        }
    }
})

使用方法:
this.$store.getters.doneTodos获取了过滤后的state数据

5.Modules

当遇见大型项目时,数据量大,store就会显得很臃肿,这个时候,我们要对我们的状态进行模块划分。而module就是来干这样的事情的。
Vuex 允许我们将 store 分割成模块(module)。每个模块拥有自己的 state、mutation、action、getter、甚至是嵌套子模块——从上至下进行同样方式的分割

modules: {
    cityModules:{
      namespaced: true,
      state: {
        cityname:'china',
      },
      mutations: {
        
      },
    },
    userModules:{
      namespaced: true,
      state: {
        username:'小红',
      },
      mutations: {
        
      }
    },
  }

在这里插入图片描述
使用方法
在vue页面中调用:

this.$store.state.cityModules.cityname

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

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

相关文章

分享思源笔记的几个骚操作

文章目录 思维导图复习法效果视频制作过程使用方法 大纲复习方法制作过程 人工智能简易使用效果制作过程 思维导图复习法 效果视频 bandicam20240817222246034.mp4 制作过程 首先下载【写味】主题或者是[自定义块样式]插件 他两个的区别是 思维导图以列表形式写出来 选择转…

计算机毕业设计选题推荐-旅游景点数据分析-Python爬虫可视化

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

Unity教程(十一)使用Cinemachine添加并调整相机

Unity开发2D类银河恶魔城游戏学习笔记 Unity教程&#xff08;零&#xff09;Unity和VS的使用相关内容 Unity教程&#xff08;一&#xff09;开始学习状态机 Unity教程&#xff08;二&#xff09;角色移动的实现 Unity教程&#xff08;三&#xff09;角色跳跃的实现 Unity教程&…

武林外传书生版单机安装教程+GM工具+虚拟机一键端

今天给大家带来一款单机游戏的架设&#xff1a;武林外传书生版。 另外&#xff1a;本人承接各种游戏架设&#xff08;单机联网&#xff09; 本人为了学习和研究软件内含的设计思想和原理&#xff0c;带了架设教程仅供娱乐。 教程是本人亲自搭建成功的&#xff0c;绝对是完整…

快速带你玩转高性能web服务器后续

目录 一、Nginx 高级配置 1.1 Nginx 状态页 1.2 Nginx 压缩功能 1.3 Nginx的版本隐藏 1.4 Nginx 变量使用 1.4.1 内置变量 二、 Nginx Rewrite 相关功能 2.1 ngx_http_rewrite_module 模块指令 2.1.1 if 指令 2.1.2 set 指令 2.1.3 break 指令 2.1.4 return 指令 2…

cmake install setlocal错误

cmake中的代码如下&#xff1a; #设置安装目录的前缀 set(CMAKE_INSTALL_PREFIX $ENV{PUBLISH_DIR}) #这边的输出满足要求 message(STATUS "install dir:${CMAKE_INSTALL_PREFIX}") #指定安装 install(TARGETS ${TARGET_NAME} RUNTIME DESTINATION bin …

数据埋点系列总结|从基础到实践的深度总结

在当今数字化时代,数据已成为企业的核心资产,而数据驱动决策则是充分利用这一资产的关键方法。本系列文章全面探讨了从数据收集到分析,再到实际应用的整个过程,为读者提供了深入而实用的指导。让我们深入回顾这个journey,详细探讨每个主题的核心内容,并思考数据驱动决策的未来发…

SHOPLINE x TiDB丨集群成本降低 50%!跨境电商 SHOPLINE 交易、商品管理等核心业务的数据库升级之路

导读 本文整理自 TiDB 社区深圳站——SHOPLINE 数据库/TiDB 负责人车佳蔚的演讲《SHOPLINE & TiDB 在跨境电商中的应用实践》。本次分享深入探讨了 SHOPLINE 在跨境电商领域的数字化转型过程中&#xff0c;如何通过 TiDB 技术应对技术挑战&#xff0c;实现降本增效。 本文…

《重生到现代之从零开始的C语言生活》—— 指针3

数组名的理解 在我们使用&arr[0]的方式拿到了数组第一个元素的地址&#xff0c;但是其实&#xff0c;数组名本来就地址&#xff0c;而且是数组首元素的地址 所以数组名就是数组首元素的地址 但是会有两个例外 sizeof(数组名)&#xff0c;sizeof中单独放数组名&#xff0c…

『功能项目』移动后的光标显示【04】

我们打开上一篇03的射线双击项目&#xff0c; 本章要做的事情是在PlayerRayNavgation脚本中添加一个移动光标&#xff0c;实现人物在场景中鼠标点击移动后在移动过程中出现移动目标光标的效果。 在unity编辑器中创建一个Plane 重命名为MovementSign 删掉碰撞器 创建一个材质 选…

杰发科技AC7840——CAN通信简介(8)_通过波特率和时钟计算SEG_1/SEG_2/SJW/PRESC

通过公式计算 * 波特率和采样点计算公式&#xff1a;* tSeg1 (S_SEG_1 2); tSeg2 (S_SEG_2 1).* BandRate (SCR_CLK / (S_PRESC 1) / ((S_SEG_1 2) (S_SEG_2 1))), SCR_CLK 为CAN 模块源时钟* SamplePoint (tSeg1 / (tSeg1 tSeg2)). {0x0D, 0x04, 0x04, 0x3B},…

avue-crud 自定义搜索项 插槽

加上 -search 就可以自定义查询项了

制定sbti科学碳目标的主要原则是什么?

制定科学碳目标主要遵循以下原则&#xff1a; 科学性&#xff1a; 基于气候科学&#xff1a;科学碳目标的设定必须依据可靠的气候科学研究成果&#xff0c;以确保目标能够真实反映对气候变化的有效应对。例如&#xff0c;要考虑到将全球平均气温升幅控制在远低于工业化前水平 2…

全国产化服务器:飞腾FT2000+/64核密集计算、显控及存储一体式加固服务器

飞腾FT2000/64核的加固服务器是一款专为高安全性、高可靠性及能在严苛环境下稳定运行而设计的服务器产品。以下是对该服务器的详细介绍&#xff1a; 一、处理器与核心组件 处理器&#xff1a;搭载飞腾FT2000/64核处理器&#xff0c;该处理器基于ARM架构&#xff0c;集成了64个…

C语言--01基础数据类型

1.整型 概念&#xff1a;表达整数类型的数据语法&#xff1a; int a 123; // 定义了一个专门用来存储整数的变量a a 456 ; 需要注意的地方&#xff1a; int 的本意是 integer&#xff0c;即整数的意思int a 代表在内存中开辟一块小区域&#xff0c;称为 a&#xff0c;用来…

Kafka快速入门:Kafka驱动JavaApi的使用

生产者和消费者是Kafka的核心概念之一&#xff0c;它们在客户端被创建和使用&#xff0c;并且包含了许多与Kafka性能和机制相关的配置。虽然Kafka提供的命令行工具能够执行许多基本操作&#xff0c;但它无法实现所有可能的性能优化。相比之下&#xff0c;使用Java API可以充分利…

谁有实际开发权限?

需要查一下&#xff0c;谁有实际开发权限。 正常来说&#xff0c;是按权限查&#xff0c;但是&#xff0c;有权限&#xff0c;不见得能开发&#xff0c;谁开发都得要个sap key。 那切入点就是这个key了&#xff0c;毕竟是问谁有实际开发权限。 直接给结果&#xff1a; 好啦&…

通过POJO生成MySQL的DDL语句

背景 有时候下载的源码没有数据库的DDL语句&#xff0c;需要手动去创建&#xff0c;这就很麻烦了&#xff0c;这时需要一个利器通过POJO对象生成DDL语句&#xff0c;一键生成&#xff0c;直接执行即可。 工程结构示例 pom.xml文件 <?xml version"1.0" encodin…

如何在 Git 中安全撤销提交与更改

文章目录 前言一、Git Reset1. --soft&#xff1a;保留变更在暂存区2. --mixed&#xff08;默认选项&#xff09;&#xff1a;保留变更在工作区3. --hard&#xff1a;彻底丢弃所有变更 二、Git Revert1. 撤销单个提交2. 撤销多个提交3. 撤销合并提交 三、实际例子总结 前言 在…

你知道手机零部件尺寸检测的重要性吗?

手机零部件作为手机制造行业的基础&#xff0c;其品质的优劣直接关系到行业的发展&#xff0c;所以加强手机精密零部件尺寸检测非常重要。如今&#xff0c;手机零部件变得更加精细&#xff0c;对质量的要求也在不断提高&#xff0c;随着生产规模逐渐扩大&#xff0c;传统的检测…