几分钟带你认识vuex的五个核心属性

2023-11-12

目录

一、Vuex是什么?

二、什么数据可以储存在vuex中呢?

三、对于使用Vuex的理解是什么?

四、vuex由五部分组成(五种状态/五种属性)

五:安装配置

 六、详解五种状态

1.state:存放公共数据 

2.getters:计算属性,对state里的变量进行过滤。

3.mutations:唯一可以改变state数据的工具,相当于vue里的methods

4.actions:异步操作

5.modules:模块化


一、Vuex是什么?


介绍:Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式

理解:核心就是 store(仓库),仓库是用来干什么的?你就当它用来储存东西的。

二、什么数据可以储存在vuex中呢?


a.如果一个数据,需要在多个组件中重复使用,可以把数据存放在vue的store中

b.用户数据,购物车数据

三、对于使用Vuex的理解是什么?


       由于Vue是单向数据流,子组件内部不能直接修改从父级传递过来的数据,子组件与子组件之间无法相互传递数据。如果我们想让两个子组件之间进行通信的话,可以借助子组件 A 向父组件传值,父组件接收子组件 A 的数据后再传给 B 组件这样的方式进行通信。

       但是这样会有一个问题,就是如果子组件 A 的父组件上面还有一层爷爷组件,或者还有更多祖父类型的层级,那么是不是会很麻烦。

       因此,我们会想到能不能我们将一个共有的数据存在一个特定的地方,用的时候自己去拿,这样就不需要一层层传值,于是乎 Vuex 就应运而生了。

四、vuex由五部分组成(五种状态/五种属性)

 VueX五个核心属性分别是state、getter,mutations、actions、module


state: 定义vuex的数据地方

actions:定义异步延迟的方法

mutations: 唯一可以修改state数据的方法

getters:从现有state数据计算出新的数据, 类似于vue组件中的计算属性,对state数据进行计算(会被缓存)

modules:模块化管理store(仓库),每个模块拥有自己的 state、mutation、action、getter

五:安装配置


第一步:npm i vuex --save/-S
第二步: 创建store.js 
第三步:挂载使用        Vue.use(vuex)
第四步:const store = new Vuex.Store({...配置项})
第五步:导出 export default store
第六步:导入main.js 在根实例配置 store 选项指向 store 实例对象

具体如下:

安装
 

npm install vuex

//简写npm i vuex

 创建store.js 

// 初始化一个vuex的实例(数据仓库) 导出即可
import Vuex from 'vuex'
import Vue from 'vue'
 
// 使用安装
Vue.use(Vuex)
 
// 初始化
const store = new Vuex.Store({
  // 配置(state|mutations|actions)
})
 
export default store

 把store对象挂载到Vue实例中

 

import store from '@/store'
new Vue({
  // 把store对象挂载到vue实例对象中,这样就可以在所有的组件中获取store中的数据了
  store,
  render: h => h(App),
}).$mount('#app')

 六、详解五种状态

1.state:存放公共数据 

状态state用于存储所有组件的数据。

state: {
		// 定义vuex中的数据
		cartNum: 10,
	},

 

总结:

  1. state中的数据是自定义的,但是state属性名是固定的
  2. 获取数据可以通过 $store.state
  3. 可以使用计算属性优化模板中获取数据的方式
  4. 计算属性不可以使用箭头函数(箭头函数本身是没有this的,实际上用的是父级函数中的this)

2.getters:计算属性,对state里的变量进行过滤。

getters:从现有state数据计算出新的数据

  • 先定义getters

//在组件中调用
$store.getters.fee
// 相当于state的计算属性(基于State处理成另外一份数据)
// getters的主要应用场景:模板中需要的数据和State中的数据不完全一样
// 需要基于state中的数据进行加工处理,形成一份新的的数据,给模板使用
getters: {
		// 从现有数据计算新的数据 每个商品佣金是0.5元
		// fee佣金会跟随cartNum变化而变化
		fee:function(state){
			return state.cartNum*0.5;
		}
	},

 

在调用时,使用$store.getters.方法名,如$store.getters.powerCounter即可

  • 再使用getters
caleList () {
  // 注意:获取getters的值,不需要加括号(当属性使用)
  return this.$store.getters.getPartList
},

总结:

  1. getters相当于在State和组件之间添加一个环节(对state中的数据进行加工处理后再提供给组件)
  2. getters不要修改state中的数据
  3. getters类似之前的计算属性(基于state中的数据进行计算)

 

3.mutations:唯一可以改变state数据的工具,相当于vue里的methods

mutations:定义修改数据的方法

目标:Vuex规定必须通过mutation修改数据,不可以直接通过store修改状态数据。

为什么要用mutation方式修改数据?Vuex的规定

为什么要有这样的规定?统一管理数据,便于监控数据变化

1.vuex的store状态的唯一更新方式:

提交mutations
mutations主要包括两部分:

  • 字符串的事件类型
  • 一个回调函数,该回调函数的第一个参数就是state
mutations: {
		// 修改state数据必须在mutations中的方法
		// 方法名建议大写
		SET_CART_NUM(state,data){
			// 修改cartNum的值
			state.cartNum = data;
		}
	},

2.在组件中访问mutations的方法


$store.commit('SET_CART_NUM',100)

<p>购物车数量:{{$store.state.cartNum}}</p>
<button @click="$store.commit('SET_CART_NUM',100)">修改为100</button>
<button @click="$store.commit('SET_CART_NUM',$store.state.cartNum+1)">修改+1</button><br>

总结:

先定义(mutations),再出发 this.$store.commit(‘mutation的名称,参数’)
mutation的本质就是方法,方法名称自定义,mutation函数内部负责处理的变更操作。
一种操作就是一个mutation,不同的mutation处理不同的场景。
 

4.actions:异步操作

actions:定义异步延迟的方法

  • 通常情况下,Vuex要求我们的mutation中的方法必须是同步方法
  • 如果使用异步操作,那么devtools将不能很好地追踪
  • 如果确实有异步操作,要使用Action替代mutation完成

先安装axios的包

npm i axios
//导入包
import axios from 'axios'

再定义获取数据方法

 

actions: {

    // actions是固定的,用于定义异步,网络延迟等方法
	// 只能调用mutations,不能直接修改state
		getCartNum(context,data){
			// 可以执行网络请求,等待延迟
			setTimeout(()=>{
				// 等待4秒后执行mutations的 SET_CART_NUM方法
				context.commit("SET_CART_NUM",data);//修改了cartNum的值为1
			},4000)
		}
	
	},

  • mutation中的方法用commit回调
  • actions中的方法用dispatch回调
  • state里的状态只能在mutation中更改

总结:

  1. 原始方式:this.$store.dispatch(‘queryData’, num)
  2. 简化方式一:对象
  3. 简化方式二:数组

 

5.modules:模块化

modules: 模块化vuex,可以让每一个模块拥有自己的 state、mutation、action、 getters,使得结构非常清晰,方便管理。

注意style上加scoped属性的原理
在 Vue 组件中,为了使样式模块化,不对全局造成污染,可以在style 标签上添加 scoped 属性以表示它的只属于当下的模块,局部有效。
结合实际:我们做的后管系统设置头像图片样式的时候,不加scoped属性就会影响全局样式

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

几分钟带你认识vuex的五个核心属性 的相关文章

  • Web Worker 中的 RequireJS

    我正在尝试在网络工作者中使用 RequireJS 问题是我在使用它时不断收到以下错误 Uncaught Error importScripts failed for underscore at lib underscore js 我已经测试
  • Mat select - 获取selectionChange的旧值

    我有一个项目 其中有一个包含以下内容的表单mat select选择器 每当用户更改输入时 我都会向用户显示一个对话框来确认此操作 现在 The selectionChange 通知值何时更改并将新值传递为 event 当用户取消对话框时 有
  • 考虑使用“jsdom”测试环境

    我有这个简单的测试 import React from react import render from testing library react import Button from describe Button gt it rend
  • div 准备好后如何调用函数?

    我的 javascript 文件中有以下内容 var divId divIDer jQuery divId ready function createGrid Adds a grid to the html html 看起来像这样 div
  • Angular JS未知提供者错误

    删除 Bower components 并清理缓存后 我使用 Bower install 重新安装了依赖项 该应用程序无法加载并出现以下错误 未捕获的错误 injector unpr 未知提供程序 forceReflowProvider 这
  • 如何确保循环完成后执行语句?

    下面是我的代码的快照 routes index js exports index function req res var results new Array for var i 0 i lt 1000 i do database quer
  • ES6 在defineAsyncComponent 中命名导入

    我想异步加载我的网络应用程序的一些元素 这是旧的导入 import Popover PopoverButton PopoverPanel from headlessui vue export default components Popov
  • 在 vuejs 上将 \n 替换为新行

    我正在尝试将 n 字符替换为来自端点的数据的新行 I tried p item licensedocument legal documentText replace r n r n g br p 并没有奏效 当我将replace 写入问题末
  • 为什么此 Firebase 可调用函数不返回值?

    我有一个应返回值的可调用函数 但唯一返回的是 null 以下是该功能的当前版本 我也尝试过回报第一个承诺 原来的once调用 最后在另一个then返回 GUID 在这种情况下它实际上返回了数据 但它立即返回并且 GUID 为空 我怎样才能实
  • Xml、xsl Javascript 排序

    我正在寻找一种使用 javascript 对 xml 数据进行排序的方法 并希望最终过滤掉数据 我知道这一切都可以在 xsl 文件中实现 但我想在客户端进行 我已经搜索了多个使用 javascript 进行排序的地方 但其中大部分要么太特定
  • innerText 和 html 之间的区别

    有什么区别innerText text and html innerText or text http docs jquery com Attributes text如果您使用的是 jQuery 不包含任何 HTML 标签 因此 如果您有一
  • JavaScript 语法是什么:{Ci, CC}? [复制]

    这个问题在这里已经有答案了 我正在做一些 FF 附加开发 我看到这样的语法 var Cc Ci require chrome 只是好奇这个语法是什么 以及它是否对 FF 开发或其他东西有特殊意义 这称为解构赋值 它的一个特点是JavaScr
  • 如何根据本地存储中的另一个数据响应推迟 XMLHttpRequest [重复]

    这个问题在这里已经有答案了 function to download pps compress txt from cloud server for global parameter set PPs function get pps para
  • Vue: vue-i18n: 无法翻译 keypath 的值,使用 keypath 的值作为默认值

    我正在使用 Vue 我想展示三种语言 英语 他加禄语和宿务语 现在我有错误 无法转换键路径 NavbarMobile home 的值 使用 keypath 的值作为默认值 我通过 console log this i18n locale 检
  • 为什么使用 MarkForCheck() 和 setTimeout?

    我对 ChangeDetectorRef 中的 MarkForCheck 方法有疑问 对于一种用法我必须使用this cd markForCheck 因为在控制台中我获取了值 但它没有在视图上更新 setTimeout gt this ch
  • Opera Mobile 9.7 Beta 设置焦点 [重复]

    这个问题在这里已经有答案了 我们使用手持式扫描仪将物品移入和移出库存 扫描仪运行一个 ASP 页 该页提交表单以移动项目 我们最近购买了一台运行 Windows Mobile 6 1 的新扫描仪 很快就意识到 Mobile IE 完全没用
  • Meteor:即使设置了 ANDROID_HOME 也未设置

    操作系统 Ubuntu 14 04 框架 流星1 1 0 2 应用名称 Songofy 这是输出meteor install sdk android meteor install sdk android Found Android bund
  • 当我尝试使用 jasmine 进行测试时,应用程序文件夹未在 Ext.appliation 中加载

    我正在尝试在我的应用程序 Ext js 5 中实现茉莉花以进行单元测试 为此 我创建了应用程序测试文件 Ext require Ext app Application Ext Loader setConfig enabled true Ex
  • 如何阻止用户重复单击 jQuery AJAX 调用?

    我有一个包含以下脚本的网页 JavaScript function LinkClicked var stage this id var stop ContentPlaceHolderMenu txtDate val var nDays Co
  • Tizen SDK:找不到变量:tizen

    我正在尝试使用 Tizen SDK 创建一个 Web 应用程序 当我启动应用程序时 一切都很好 但是当我在模拟器上按 后退 按钮时 没有任何反应 并且我看到一条消息 55435 js main js 9 ReferenceError 找不到

随机推荐

  • arduino字符串处理函数

    判断字符串是否相等 equals 和equalsIgnoreCase 语法 string equals string2 string equalsIgnoreCase string 区别 是否忽略大小写 返回值布尔类型 将字符串复制到宁一个
  • 大数据毕业设计 B站数据分析与可视化系统 - python

    文章目录 0 前言 1 课题背景 2 实现效果 3 数据获取 4 数据可视化 5 最后 0 前言 这两年开始毕业设计和毕业答辩的要求和难度不断提升 传统的毕设题目缺少创新和亮点 往往达不到毕业答辩的要求 这两年不断有学弟学妹告诉学长自己做的
  • 启用与禁用游戏物体——unity

    Unity启用与禁用游戏物体gameObject activeInHierarchy 返回当前物体是否启用gameObject SetActive true 将物体启用gameObject SetActive false 将物体禁用 由于物
  • Vue中怎么设置图标

    在vue项目中 我们怎样设置浏览器图标 我们来看vue项目的目录结构 根目录下有一个index html 这个就相当于我们普通项目中的各个html页面文件 所以设置方法就是在index html的head标签中添加link标签 在这里要注意
  • 关联规则与提高算法效率

    关联规则与提高算法效率 提高效率关键点一 先验原理 如果一个项集是频繁的 则它的所有子集一定也是频繁的 原理的解释 考虑图6 3所示的项集格 假定 C
  • 苹果端性能测试

    iOS性能测试 1 APP启动时间 工具 Time Profiler 1 17s 初始化应用程序地址空间和动态链接所需的框架所需时间 62 90ms 从UlAppicationMain 或NSApplicationMain 启动到完成did
  • MySQL - 视图操作

    视图操作 视图是从一个或多个表中导出来的表 是一种虚拟存在的表 视图就像一个窗口 通过这个窗口可以看到系统专门提供的数据 这样用户可以不看整个数据库表中的数据 而只关心对自己有用的数据 视图可以使用户的操作更方便 而且可以保障数据库系统的安
  • MAC-允许任何来源没有了怎么办

    允许任何来源开启方法 首先看看系统设置中有没有 任何来源 的选项 先打开 系统偏好设置 gt 安全与隐私 gt 通用 选项 检查是否已经启用了 任何来源 选项 如果没有启用 先点击左下角的小黄锁图标解锁 然后选中 任何来源 如果需要恢复允许
  • Mysql 5.6 双主互备高可用(Keepalived+mysql) (一)

    安装环境 Redhat 5 8 mysql版本 mysql 5 6 25 DB机器A 主 192 168 8 193 主机名 mysql01 DB机器B 192 168 8 194 主机名 mysql02 mysql VIP IP 192
  • Python-PyEcharts绘制折线图(Line)

    Python PyEcharts绘制折线图 Line 一 简介 参考官网地址 https pyecharts org zh cn intro Echarts框架的Python版本 PyEcharts包 安装PyEcharts包 pip in
  • [OpenWrt] Flash 由4M改8M(或者16M), openwrt源码的修改

    http www right com cn forum thread 75309 1 1 html trunk tools firmware utils src mktplinkfw c 只修改fw max len为0xfc0000 16M
  • 《花雕学AI》19:比较ChatGPT与新Bing在文章润色方面的应用优势与测试案例

    引言 文章润色是指对已经写好的文章进行修改 优化或完善的过程 以提高文章的质量和效果 文章润色涉及到多方面的内容 如语言表达 逻辑结构 文献引用 格式规范等 文章润色对于提升写作水平 提高论文发表率 增加学术影响力等都有重要意义 然而 文章
  • anaconda安装tensorflow-gpu

    今天用anaconda安装了tensorflow gpu 可谓是耗尽心血 废话不多说 开始安装 第一步 安装anaconda和显卡驱动 超详细Anaconda安装教程 极小白的博客 CSDN博客 这个教程太多可以借鉴网上的文章或视频 第二步
  • Python实现猜拳

    直接上代码 import random print 猜拳小游戏 print 开始 usernum 0 mnum 0 i 1 while i print 0 剪刀 1 石头 2 布 userw int input 请输入你的出拳 if use
  • 嫌自己的签名不好看?那就用Python给自己设计一个专属签名

    导语 哈喽铁汁们 最近呢小编发现身边许多小伙伴都想给自己正一个好看点的签名 但是都无从下手 于是就准备出这期啦 俗话说字如其人 生活中有很多场景都需要我们签名 如果是一些不重要的场景 我们的签名好坏基本无所谓了 但如果是一些比较重要的场景
  • 使用python bypy模块上传文件至百度网盘

    安装bypy pip install bypy 终端输入 bypy info 访问此url 登录备份目标网盘 将获取的授权码粘贴到命令行并回车 再次输入bypt info 出现容量信息表示成功 终端上传代码 bypy upload G Pi
  • GND_EARTH和GND的关系是什么?

    一 GND EARTH和GND的关系是什么 在电路设计中常见到GND EARTH和GND 本文讨论以下几个问题 1 什么情况下需要GND EARTH 当机壳为导体时 需要GND EARTH 2 GND和GND EARTH如何连接 图1 项目
  • 功能测试主要做什么?

    说到功能测试 大多数人都认为没技术含量 小白都能做 个人认为这是对功能测试的认知错误 1 功能测试 测试思维 测试较为重要的是要有测试思维 通常测试新手设计用例时一条需求仅能写出一两条用例 有经验的老员工设计用例时思考的会更全面 这里并不是
  • 程序员必须知道的10大基础实用算法及其讲解

    http www cricode com 2001 html
  • 几分钟带你认识vuex的五个核心属性

    目录 一 Vuex是什么 二 什么数据可以储存在vuex中呢 三 对于使用Vuex的理解是什么 四 vuex由五部分组成 五种状态 五种属性 五 安装配置 六 详解五种状态 1 state 存放公共数据 2 getters 计算属性 对st