Vue3.js - 一文看懂Vuex

1. 前言

Vuex 是 Vue.js 的官方状态管理库,用于在 Vue 应用中管理组件之间共享的状态。Vuex 适用于中大型应用,它将组件的共享状态集中管理,可以避免组件间传递 props 或事件的复杂性。

2. 核心概念

我们可以将Vuex想象为一个大型的Vue,存储在Vuex中的数据,方法无论在任何组件中我们都可以使用,调用,修改

Vuex中的核心组件包括不仅限于以下部分:

  • State(状态):存储应用的状态数据。
  • Getters(获取器):可以视图化 state,类似于 Vue 组件中的计算属性,用于获取 state 的值并进行加工。
  • Mutations(变更):同步修改 state 的方法。唯一能直接修改 state 的地方。
  • Actions(行为):用于处理异步操作,类似于 mutations,但可以包含异步代码,最终通过 mutations 更新 state。
  • Modules(模块化):当应用状态变得复杂时,可以将 Vuex store 分割成模块,每个模块拥有自己的 state、mutations、actions 和 getters。

3. Vuex的安装

npm install vuex@next
# or
yarn add vuex@next

如果可以指定vuex安装的版本,目前最新版本为vuex4

4. 创建vuex

我们常见于在工程项目中单独使用一个文件夹存放我们的vuex脚本

在src中新建一个store文件夹创建一个js脚本,开始我们创建vuex的第一步

import {createStore} from 'vuex'
const store = createstore({}) 

导入vuex中的createstore函数,为其配置相应的对象变量

4.1 state 状态

const store = createStore({state:{count:0}
})

上述代码中为store配置了state,state中存储我们的“全局数据”count赋值为0,在其他组件中我们可以调用查看我们的count

 

4.2 mutations 变更

const store = createStore({state:{count:0},mutations:{increment(state,value){xxxx}}
})

唯一可以直接修改state的地方

上述代码配置了mutations组件,类比于vue中的methods,mutations中包装了若干个函数,可以为函数传入state组件,便可以访问以及操作state中存储的数据;value则是想要传入的数据。

mutations 存储的函数也是全局的,任意组件都可以进行调用

4.3 getter 获取器

const store = createStore({state:{count:0},mutations:{},getters:{count10(state){return state.count+10}}
})

 类比于vue中的computed属性,返回一个操作之后的全局数值

4.4 actions 行为

用于处理异步操作,类似于 mutations,但可以包含异步代码,最终通过 mutations 更新 state

actions: {asyncIncrement({ commit }) {setTimeout(() => {commit('increment');}, 1000);}},

5. vue中使用vuex

5.1 vue注册

需要在应用中注册 Vuex store。在 main.js 文件中导入并使用 Vuex store:

//main.js文件
import {createApp} from 'vue'
import App from './App.vue'
import {store} from './store/index.js'app = createApp(App) //创建vue,并将App组件传入
app.use(store) //让我们的app这个vue组件使用vuex组件
app.mount('#app') //挂载到html文件中

5.2 在组件中访问vuex

在 Vue 组件中通过 this.$store 访问 Vuex store。例如,在模板中访问 countdoubledCount,并触发 mutations 和 actions。

通常使用$标识符代表使用vue上的实例的全局组件。

<template><div><p>Count: {{ count }}</p><p>Doubled Count: {{ doubledCount }}</p><button @click="increment">Increment</button><button @click="decrement">Decrement</button><button @click="asyncIncrement">Async Increment</button></div>
</template><script>
export default {computed: {// 通过 getter 获取状态count() {return this.$store.state.count;},doubledCount() {return this.$store.getters.doubledCount;}},methods: {// 触发 mutationsincrement() {this.$store.commit('increment');},decrement() {this.$store.commit('decrement');},// 触发 actionsasyncIncrement() {this.$store.dispatch('asyncIncrement');}}
};
</script>

6. modules 

当应用变得较为复杂时,你可以通过模块化来管理 store。每个模块可以拥有自己的 state、mutations、actions 和 getters,从而更好地组织代码。

与vue类似,创建不同的vuex组件(module),最后使用一个大的框架组件将其他模块进行涵盖

// store/modules/user.js
export default {state: {name: 'John Doe'},mutations: {setName(state, name) {state.name = name;}},actions: {updateName({ commit }, name) {commit('setName', name);}},getters: {userName(state) {return state.name;}}
};
// store/modules/cart.js
export default {state: {items: []},mutations: {addItem(state, item) {state.items.push(item);}},actions: {addItemToCart({ commit }, item) {commit('addItem', item);}},getters: {cartItems(state) {return state.items;}}
};

最后在总组件中配置modules,使用modules进行配置 

// store.js
import { createStore } from 'vuex';
import user from './modules/user';
import cart from './modules/cart';const store = createStore({modules: {user,cart}
});export default store;

 

7. 总结

总的来说,vuex是处理状态管理的一个强大工具。

在较大型项目中避免重复持续的使用事件配置以及props进行处理组件之间的数据

Vuex 在 Vue 3 中依然是响应式的。这意味着,当 Vuex 中的 state 被改变时,所有依赖该 state 的组件会自动重新渲染,确保 UI 始终与 state 保持同步。

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

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

相关文章

图论-代码随想录刷题记录[JAVA]

文章目录 前言Floyd 算法dijkstra&#xff08;朴素版&#xff09;最小生成树之primkruskal算法 前言 新手小白记录第一次刷代码随想录 1.自用 抽取精简的解题思路 方便复盘 2.代码尽量多加注释 3.记录踩坑 4.边刷边记录&#xff0c;更有成就感&#xff01; 5.解题思路绝大部分来…

《Python网络安全项目实战》项目5 编写网站扫描程序

《Python网络安全项目实战》项目5 编写网站扫描程序 项目目标&#xff1a;任务5.1 暴力破解网站目录和文件位置任务描述任务分析任务实施相关知识任务评价 任务5.2 制作网页JPG爬虫任务分析任务实施相关知识任务评价任务拓展 WEB网站安全渗透测试过程中需要进行目录扫描和网站爬…

时序论文20|ICLR20 可解释时间序列预测N-BEATS

论文标题&#xff1a;N-BEATS N EURAL BASIS EXPANSION ANALYSIS FOR INTERPRETABLE TIME SERIES FORECASTING 论文链接&#xff1a;https://arxiv.org/pdf/1905.10437.pdf 前言 为什么时间序列可解释很重要&#xff1f;时间序列的可解释性是确保模型预测结果可靠、透明且易…

硬件工程师之电子元器件—二极管(4)之热量对二极管温度特性的影响

写在前面 本系列文章主要讲解二极管的相关知识,希望能帮助更多的同学认识和了解二极管。 若有相关问题,欢迎评论沟通,共同进步。(*^▽^*) 二极管 7. 热量对二极管温度特性的影响 半导体器件的电气特性通常对环境温度和工作结温敏感。 Si二极管的特性在工作范围内通常如下…

Java算法OJ(7)随机快速排序

目录 1.前言 2.正文 1. 快速排序的基本原理 2. 随机快速排序的改进 3. 随机快速排序的步骤 3.小结 1.前言 哈喽大家好吖&#xff0c;今儿给大家带来算法—随机快速排序相关知识点&#xff0c;废话不多说让我们开始。 2.正文 在了解随机快排之前&#xff0c;先了解一下…

基于 Python Django 的二手房间可视化系统分析

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

用MVVM设计模式提升WPF开发体验:分层架构与绑定实例解析

MVVM&#xff08;Model-View-ViewModel&#xff09;是一种架构模式&#xff0c;广泛应用于现代前端开发&#xff0c;尤其是在微软的WPF&#xff08;Windows Presentation Foundation&#xff09;应用程序中。它旨在通过将视图&#xff08;UI&#xff09;与业务逻辑&#xff08;…

如何进行产线高阶能耗数据的计算和可视化?

一、前言 在当前经济下行时期&#xff0c;越来越来多企业开始对产线进行数字化转型&#xff0c;提高企业竞争力。在产线数字化转型过程中&#xff0c;产线高阶能耗数据的计算和可视化是比较重要的一环&#xff0c;今天小编就和大家分享如何对产线能耗数据进行计算和可视化。 …

亲测有效:Maven3.8.1使用Tomcat8插件启动项目

我本地maven的settings.xml文件中的配置&#xff1a; <mirror><id>aliyunmaven</id><mirrorOf>central</mirrorOf><name>阿里云公共仓库</name><url>https://maven.aliyun.com/repository/public</url> </mirror>…

开源项目推荐——OpenDroneMap无人机影像数据处理

实景三维作为GIS最火的课题&#xff0c;最近在想做一套自己的三维构建工具&#xff0c;考察了几个开源项目&#xff0c;把自己的搜索过程用csdn记录下来&#xff0c;希望也能帮助到各位同仁。 OpenDroneMap&#xff08;ODM&#xff09;是一个开源项目&#xff0c;旨在处理无人…

蓝桥杯c++算法学习【2】之搜索与查找(九宫格、穿越雷区、迷宫与陷阱、扫地机器人:::非常典型的必刷例题!!!)

别忘了请点个赞收藏关注支持一下博主喵&#xff01;&#xff01;&#xff01; 关注博主&#xff0c;更多蓝桥杯nice题目静待更新:) 搜索与查找 一、九宫格 【问题描述】 小明最近在教邻居家的小朋友小学奥数&#xff0c;而最近正好讲述到了三阶幻方这个部分&#xff0c;三 …

Nuxt.js 应用中的 schema:beforeWrite 事件钩子详解

title: Nuxt.js 应用中的 schema:beforeWrite 事件钩子详解 date: 2024/11/14 updated: 2024/11/14 author: cmdragon excerpt: schema:beforeWrite 钩子是 Vite 提供的一个功能强大的生命周期钩子,允许开发者在 JSON Schema 被写入之前执行自定义操作。利用这个钩子,您可以…

当你想要conda安装遇到UnavailableInvalidChannel: HTTP 404 NOT FOUND for channel的问题

想要装个虚拟环境&#xff0c;结果遇到404。 看了第一个GitHub帖子中的一句话 UnavailableInvalidChannel: The channel is not accessible or is invalid. Navigator not launching. Issue #9473 conda/conda GitHub 想说那我就把这个not found的channel删掉吧&#xff…

DAY112代码审计PHP开发框架POP链利用Yii反序列化POP利用链

一、pop1链的跟踪 1、路由关系 2、漏洞触发口unserialize(base64_decode($data)); 2、__destruct()&#xff0c;魔术法方法调用close函数方法 3、未找到利用链&#xff0c;尝试__call魔术方法 4、逆推找call_user_func 函数 第一部分 namespace yii\db; class BatchQueryResu…

C++STL容器——map和set

目录 一.关联式容器 二.键值对 三.树形结构的关联式容器 1.set 2.map 3.multiset和multimap 四.整体代码 map_set.cpp 一.关联式容器 在初阶阶段&#xff0c;我们已经接触过STL中的部分容器&#xff0c;比如&#xff1a;vector、list、deque、 forward_list(C11)等&…

Java 责任链模式 减少 if else 实战案例

一、场景介绍 假设有这么一个朝廷&#xff0c;它有 县-->府-->省-->朝廷&#xff0c;四级行政机构。 这四级行政机构的关系如下表&#xff1a; 1、县-->府-->省-->朝廷&#xff1a;有些地方有完整的四级行政机构。 2、县-->府-->朝廷&#xff1a;直…

Rocky、Almalinux、CentOS、Ubuntu和Debian系统初始化脚本v9版

Rocky、Almalinux、CentOS、Ubuntu和Debian系统初始化脚本 Shell脚本源码地址&#xff1a; Gitee&#xff1a;https://gitee.com/raymond9/shell Github&#xff1a;https://github.com/raymond999999/shell脚本可以去上面的Gitee或Github代码仓库拉取。 支持的功能和系统&am…

EXCEL延迟退休公式

如图&#xff1a; A B为手工输入 C2EOMONTH(A2,B2*12) D2EOMONTH(C2,IF(C2>DATEVALUE("2025-1-1"),INT((DATEDIF(DATEVALUE("2025-1-1"),C2,"m")4)/4),0)) E2EOMONTH(A2,B2*12IF(EOMONTH(A2,B2*12)>DATEVALUE("2025-1-1"),INT(…

ARM架构中断与异常向量表机制解析

往期内容 本专栏往期内容&#xff0c;interrtupr子系统&#xff1a; 深入解析Linux内核中断管理&#xff1a;从IRQ描述符到irq domain的设计与实现Linux内核中IRQ Domain的结构、操作及映射机制详解中断描述符irq_desc成员详解Linux 内核中断描述符 (irq_desc) 的初始化与动态分…

论文翻译 | The Capacity for Moral Self-Correction in Large Language Models

摘要 我们测试了一个假设&#xff0c;即通过人类反馈强化学习&#xff08;RLHF&#xff09;训练的语言模型具有“道德自我纠正”的能力——避免产生有害的输出——如果指示这样做的话。我们在三个不同的实验中发现了支持这一假设的有力证据&#xff0c;每个实验都揭示了道德自…