【vuex之五大核心概念】

vuex:五大核心概念

  • 一、state状态
    • 1.state的含义
    • 2.如何访问以及使用仓库的数据
      • (1)通过store直接访问
        • 获取store对象
      • (2)通过辅助函数MapState
  • 二、mutations
    • 1.作用
    • 2.严格模式
    • 3.操作流程
      • 定义 mutations 对象,对象中存放修改 state 的方法
      • 组件通过commit调用mutations进行修改
    • 4.mutations传参
      • mutation 对象中定义带参函数
      • 提交调用 mutation
    • 5.辅助函数mapMutations
      • (1)作用
      • (2)操作步骤
  • 三、actions
    • 1.作用
    • 2.操作流程
    • 3.辅助函数mapActions
      • 作用
      • 流程
  • 四、getters
    • 1.作用
    • 2.操作流程
    • 3.辅助函数mapGetters
  • 五、module(分包管理)
    • 1.作用
    • 2.创建module模块
    • 3.直接使用模块中的数据
      • (1)方式一:直接通过模块名访问
      • (2)方式二:mapState
    • 4.使用模块中getters的数据
      • (1)方式一:直接通过模块名访问
      • (2)方式二:mapGetters
    • 5.调用模块中的mutation
      • (1)方式一:直接调用
      • (2)方式二:mapMutation
    • 6.调用模块中的actions
      • (1)方式一:直接调用
      • (2)方式二:mapAction
  • 六、总结

一、state状态

1.state的含义

是整个应用的仓库,存储共用的数据

2.如何访问以及使用仓库的数据

一般来说,都有直接访问和通过辅助函数进行访问这两种方式

(1)通过store直接访问

获取store对象
适用场景语法
Vue 组件内部访问 store 对象this.$store
普通的 js 模块中获取 store 对象import store from ‘.xxx/store’
使用数据
适用场景语法
vue模板中{{ $store.state.xxx}}
Vue组件的js逻辑代码中this.$store.state.xxx
普通的 js 模块中store.state.xxx

(2)通过辅助函数MapState

辅助函数能帮助我们简化代码,使用起来更加方便

//store下的index.js文件
const store = new Vuex.Store({state: {name:"小美“}
//在需要使用的组件内导入mapState
import { mapState } from 'vuex'
//用数组方式引入State,用展开运算符进行映射
export default {computed: mapState(['name']),}

这样,我们就可以在模板中直接使用 {{ name }} 来获取并展示 name 的值。

二、mutations

1.作用

用于修改仓库里面的数据
原因:在vuex中同样要遵循单项数据流,组件是不能直接修改仓库中的数据的,所以我们需要在用mutations修改数据

2.严格模式

因为vuex不允许组件直接修改仓库里的数据,为了避免某些错误写法可能导致无效的问题,我们可以通过开启严格模式检查问题

//store/index.js
const store =new Vuex.Store({strict:true,state:{xxxxxx}
})

3.操作流程

定义 mutations 对象,对象中存放修改 state 的方法

const store = new Vuex.Store({
state: {name:"小美”
},
// 定义mutations对象
mutations: {
// 第一个参数要求是当前store的state属性
changeName (state) {state.name:"小帅“}}
})

组件通过commit调用mutations进行修改

this.$store.commit('changeName')

4.mutations传参

mutation 对象中定义带参函数

mutations: {
changeName (state,name) {state.name:name}
}

提交调用 mutation

this.$store.commit('changeName', 小羊)

注意:传参只能传state和一个自定义的参数,不支持传多个参数,但是支持传state和一个对象/数组

5.辅助函数mapMutations

(1)作用

把mutation中定义的方法提取出来,映射在组件中的methods

(2)操作步骤

store/index文件中定义mutation对象的代码不变

//在需要使用的组件内导入mapMutations
import { mapMutations } from 'vuex'
//映射在methodss中
methods: {
...mapMutations(['changeName'])
}

就可以直接调用仓库里的方法,例如,模板里

    <button @click="changeName(‘大灰狼’)">点一下我就改名</button>

而在组件js逻辑代码块中用this.changeName(‘大灰狼’)即可调用

三、actions

1.作用

用于处理异步操作
注意:actions处理异步,mutations只能处理同步,actions中的异步操作也是在调用mutations中定义的方法

2.操作流程

下面给出一个一秒后给数组增添一个数的例子:

// store.jsstate () {return {list: []}
},
mutations = {addNumber(state, number) {state.list.push(number);}
}
actions = {async addNumberWithDelay(context,number) {setTimeout(()=>{context.commit('addNumber',number)},1000)	}
}

页面中用dispatch调用actions的方法

this.$store.dispatch('addNumberWithDelay', 666)

3.辅助函数mapActions

作用

把在actions中的方法提取出来,映射在组件中的methods方法里

流程

在需要使用的组件里直接导入:

import { mapActions } from 'vuex'
methods: {
...mapActions(['addNumberWithDelay'])
}

在组件js逻辑代码块中用this.addNumberWithDelay(666’)即可调用

四、getters

1.作用

基于state里的数据进行一些操作
类似于computed计算属性

2.操作流程

例如,我们要对state里面定义好的一个数组进行筛选,筛选得到一个全是正数的列表

// store.jsconst state = {numbers: [1, -2, 3, -4, 5]
};const getters = {positiveNumbers: state => {return state.numbers.filter(num => num > 0);}
};

在需要的组件中得到该方法筛选后的数组

 return this.$store.getters.positiveNumbers

3.辅助函数mapGetters

同样也是提取getters中的方法,映射在computed中

import { mapGetters } from 'vuex'
methods: {
...mapGetters(['positiveNumbers'])
}

在组件js逻辑代码块中用this.positiveNumbers即可调用
注意:如果是在模板中调用是{{ positiveNumbers }},具体语法在上文表格中已经提到过:点我跳转查看

五、module(分包管理)

1.作用

在 Vuex 中,使用 module 可以把 store 分割成多个小模块,每个模块都有自己的 state、mutations、actions、getters 等属性,从而使得 Vuex 管理较为复杂的应用程序变得更加方便和灵活
因为一个应用会涉及到很多板块的数据,为了防止store特别膨胀复杂,管理起来更加麻烦,所以我们需要进行拆分,这样方便后续进行维护、扩展和升级等等……

2.创建module模块

大致思路是在store文件目录下新建modules文件夹,再创建不同板块的js文件。各个板块的文件中都有属于自己的state,mutations,actions和gettters.
下面举一个user的例子:

// store/modules/user.js
const state = {userInfo: {name:‘敲代码的小乐最快乐’,isLoggedIn: false}
}
const mutations = {}
const actions = {}
const getters = {}
export default {
state,
mutations,
actions,
getters
}

接着再导入注册user板块就大功告成:

import user from './modules/user'
const store = new Vuex.Store({
modules: {
user
}
})

3.直接使用模块中的数据

当使用 Vuex 存储数据时,即使将数据拆分到不同的模块中,实际上子模块的状态仍然会被挂载在根级别的状态下,并且属性名就是模块名。

(1)方式一:直接通过模块名访问

你可以使用 $store.state.模块名.xxx 的方式直接访问模块中的数据。

(2)方式二:mapState

mapState 映射根级别的状态:mapState(['xxx'])
映射子模块的状态:子模块需要开启命名空间namespaced:true,使用mapState('模块名', ['xxx'])进行访问。

export default {
namespaced: true,
state,
mutations,
actions,
getters
}

4.使用模块中getters的数据

(1)方式一:直接通过模块名访问

你可以使用$store.getters['模块名/xxx '] 的方式直接访问

(2)方式二:mapGetters

mapGetters 映射根级别的状态:mapGetters([ 'xxx' ])
映射子模块的状态:子模块需要开启命名空间,使用mapGetters('模块名', ['xxx'])进行访问。

5.调用模块中的mutation

(1)方式一:直接调用

你可以直接通过 store 调用: $store.commit('模块名/xxx ', 额外参数)

(2)方式二:mapMutation

mapMutations 映射根级别的状态:mapMutations([ 'xxx' ])
映射子模块的状态:子模块需要开启命名空间,通过mapMutations('模块名', ['xxx']))调用。

6.调用模块中的actions

(1)方式一:直接调用

你可以直接通过 store 调用: $store.dispatch('模块名/xxx ', 额外参数)

(2)方式二:mapAction

mapActions 映射根级别的状态:mapActions([ 'xxx' ])
映射子模块的状态:子模块需要开启命名空间,通过mapActions('模块名', ['xxx']))调用。

六、总结

vuex的前四大核心概念:state、mutations、getters和actions都有自己的“mapxxx”函数,它都是把其本身的方法提取出来,以映射在组件的方式访问(state和getters是映射在computed中)或者调用(mutations和actions映射在methods中)。
最后的一个核心概念是modules,它存在的意义在于对跟级别的store进行分包管理。
关系图:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Parquet 文件生成和读取

文章目录 一、什么是 Parquet二、实现 Java 读写 Parquet 的流程方式一&#xff1a;遇到的坑&#xff1a;坑1&#xff1a;ClassNotFoundException: com.fasterxml.jackson.annotation.JsonMerge坑2&#xff1a;No FileSystem for scheme "file"坑3&#xff1a;与 spa…

第四十三天| 1049. 最后一块石头的重量 II、494. 目标和、474.一和零

01背包问题 Leetcode 1049. 最后一块石头的重量 II 题目链接&#xff1a;1049 最后一块石头的重量 II 题干&#xff1a;有一堆石头&#xff0c;用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。 每一回合&#xff0c;从中选出任意两块石头&#xff0c;然后将…

网域图片的访问下载路径

网域图片的本身内容资源在网络空间中的访问下载路径

Unity(第十七部)Unity自带的角色控制器

组件Character Controller 中文角色控制器 using System.Collections; using System.Collections.Generic; using UnityEngine;public class player : MonoBehaviour {private CharacterController player;void Start(){player GetComponent<CharacterController>();}v…

Linux基本指令(上)

在Linux中&#xff0c;将文件夹称为目录&#xff0c;后面的内容都与目录相关。 1. ls指令 语法&#xff1a; ls [选项][目录或文件] 功能&#xff1a;对于目录&#xff0c;该命令列出该目录下的所有子目录与文件。对于文件&#xff0c;将列出文件名以及其他信息。 常用选项 …

Java ElasticSearch-Linux面试题

Java ElasticSearch-Linux面试题 前言1、守护线程的作用&#xff1f;2、链路追踪Skywalking用过吗&#xff1f;3、你对G1收集器了解吗&#xff1f;4、你们项目用的什么垃圾收集器&#xff1f;5、内存溢出和内存泄露的区别&#xff1f;6、什么是Spring Cloud Bus&#xff1f;7、…

Springboot解决模块化架构搭建打包错误找不到父工程

Springboot解决模块化架构搭建打包错误找不到父工程 一、情况一找不到父工程依赖1、解决办法 二、情况二子工程相互依赖提示"程序包xxx不存在" 一、情况一找不到父工程依赖 报错信息 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:…

使用Node.js构建一个简单的聊天机器人

当谈到人工智能&#xff0c;我们往往会想到什么&#xff1f;是智能语音助手、自动回复机器人等。在前端开发领域中&#xff0c;我们也可以利用Node.js来构建一个简单而有趣的聊天机器人。本文将带你一步步实现一个基于Node.js的聊天机器人&#xff0c;并了解其工作原理。 首先…

安装 Ubuntu 22.04.3 和 docker

文章目录 一、安装 Ubuntu 22.04.31. 简介2. 下载地址3. 系统安装4. 系统配置 二、安装 Docker1. 安装 docker2. 安装 docker compose3. 配置 docker 一、安装 Ubuntu 22.04.3 1. 简介 Ubuntu 22.04.3 是Linux操作系统的一个版本。LTS 版本支持周期到2032年。 系统要求双核 C…

linux c++ 开发 tensorrt 安装

tensorrt 官方下载地址&#xff08;需要注册账号登录&#xff09;&#xff1a;Log in | NVIDIA Developer 根据系统发行版和CUDA版本 (nvcc -V) 选择合适的安装包 EA&#xff08;early access&#xff09;版本代表抢先体验。 GA&#xff08;general availability&#xff09;代…

创新永不止步,织信低代码平台继续加速前进!

2023年&#xff0c;织信低代码首创“企业级”低代码概念&#xff0c;定位服务企业数字化升级战略。 经历了全年14个大版本的升级&#xff0c;下面就来细数一下2023的重大功能更新&#xff01; 1、组件设计器 织信团队凭借丰富的项目实施经验和深入客户需求理解&#xff0c;重…

vue3 构建项目

一.使用vite构建&#xff1a; npm init vitelatest 项目名称 构建的项目模板 进入项目 cd 项目名称 安装项目依赖包 npm install 启动项目 npm run dev 二.使用vue脚手架构建&#xff1a; npm init vuelatest 后续基本差不多

Win11系统安装安卓子系统教程

随着Win11系统的不断普及&#xff0c;以及硬件设备的更新换代&#xff0c;我相信很多同学都已经更新并使用到了最新的Win11系统。那么&#xff0c;Win11系统最受期待的功能“Windows Subsystem for Android”&#xff08;简称WSA&#xff09;&#xff0c;即《安卓子系统》。他可…

高马步和四平马步总结

目录 一.高马步武当袁师懋视频讲解高马步要点总结其它零散总结 二.四平马步先开胯&#xff0c;开胯的方法方法总结参考文章 三.站桩问题总结站桩时脚部灼烧感 四.记录2024 1.17 站桩突破25分钟2024年 3.1 晚上尝试四平马步&#xff0c;突破10分钟 站桩脚趾要抓地吗站桩文章 一.…

[AutoSar]BSW_Com03 DBC详解 (一)

目录 关键词平台说明一、DBC 定义1.1 相关工具 二、主要组成部分介绍2.1 Networks2.2 ECUs2.3 Network nodes2.4 messages2.5 signal2.6 Value Tables 三、主要组成部分关系图 关键词 嵌入式、C语言、autosar、OS、BSW 平台说明 项目ValueOSautosar OSautosar厂商vector &am…

[Vulnhub]靶场 Web Machine(N7)

kali:192.168.56.104 主机探测: arp-scan -l 靶机ip:192.168.56.104 端口扫描 nmap -p- 192.168.56.106 看一下web 目录扫描 gobuster dir -u http://192.168.56.106 -x html,txt,php,bak,zip --wordlist/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt exp…

将仓库A中的部分提交迁移到仓库B中

结论&#xff1a; 使用git format-patchgit am即可实现 使用场景&#xff1a; 例如仓库A这里有5个提交记录&#xff0c;commitid1, commitid2, commitid3, commitid4&#xff0c;commitid5 仓库B想用仓库A中提交的代码&#xff0c;手动改比较慢&#xff0c;当改动较多的时候…

Vuepress的使用

介绍 将markdown静态资源转换成html。 动态资源的转换还有很多&#xff0c;为什么要使用Vuepress&#xff1f; 目录分析 项目配置 详情 具体配置请看文档 插件配置 vuepress-theme-vdoing 主题插件 npm install vuepress-theme-vdoing -D先安装依赖配置主题 使用vuep…

Linux理解

VMware安装Linux安装 目录 VMware安装Linux安装 1.1 什么是Linux 1.2 为什么要学Linux 1.3 学完Linux能干什么 2.1 主流操作系统 2.2 Linux系统版本 VMware安装Linux安装 1.1 什么是Linux Linux是一套免费使用和自由传播的操作系统。 1.2 为什么要学Linux 1). 企业用人…

从预训练到通用智能(AGI)的观察和思考

1.预训练词向量 预训练词向量&#xff08;Pre-trained Word Embeddings&#xff09;是指通过无监督学习方法预先训练好的词与向量之间的映射关系。这些向量通常具有高维稠密特征&#xff0c;能够捕捉词语间的语义和语法相似性。最著名的预训练词向量包括Google的Word2Vec&#…