当前位置: 首页 > article >正文

前端(vue)学习笔记(CLASS 7):vuex

vuex概述

vuex是一个vue的状态管理工具,状态就是数据

大白话:vuex是一个插件,可以帮我们管理vue通用的数据(多组件共享的数据)

场景

1、某个状态在很多个组件来使用(个人信息)

2、多个组件共同维护一份数据(购物车)

优势

1、共同维护一份数据,数据集中化管理

2、响应式变化

3、操作简洁(vuex提供了一些辅助函数)

构建vuex[多组件数据共享]环境

基于脚手架创建项目,构建vuex多组件数据共享环境

效果是三个组件共享一份数据,任意一个组件都可以修改数据,三个组件的数据是同步的

首先需要安装vuex插件,初始化一个空仓库

1、安装vuex npm install vuex

2、新建vuex模块文件 新建store/index.js专门存放vuex

3、创建仓库 Vue.use(Vuex)创建仓库 new Vuex.Store()

4、main.js导入挂载 在main.js中导入挂载到Vue实例上

使用$store即可得到相关类

* 核心概念-state状态

1、提供数据:

State提供唯一的公共数据源,所有共享的数据都要统一放到Store中的State中存储

在state对象中可以添加我们要共享的数据

const store = new Vuex.Store({state: {count: 101}
})
2、使用数据:
通过store直接访问

获取store

1、this.$store

2、import导入store

模板中:{{ $store.state.xxx }}

组件逻辑中:this.$store.state.xxx

JS模块中:store.state.xxx

通过辅助函数(简化)

        mapState是辅助函数,帮助我们把store中的数据自动映射到组件的计算属性中

1、导入mapState

2、数组方式引入state

3、展开运算符映射

使用方式:mapState(['count])

* 核心概念-mutations

vuex同样遵循单向数据流,组件中不能直接修改仓库的数据

通过 strict: true可以开启严格模式

const store = new Vuex.Store({//开启严格模式strict: true,//通过state可以提供数据state: {title: '仓库大标题',count: 100}
})

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

const store = new Vuex.Store({//通过state可以提供数据state: {count: 100},mutations: {addCount (state) {state.count += 1}}
})

2、组件中提交调用mutations

this.$store.commit('addCount')
* mutations传参语法

提交mutation是可以传递参数的`this.$store.commit('xxx', 参数)`

1、提供mutation函数(带参数-提交载荷payload)

mutations: {...addCount (state, n) {state.count += n}
},

2、页面中提交调用mutation

this.$store.commit('addCount', 10)

Tips: 提交参数只能一个,如果有多个参数,包装成一个对象传递

* 实时输入

1、输入框内容渲染(:value)

2、监听输入获取内容(@input)

3、封装mutation处理函数(mutation传参)

4、调用传参(commit调用)

* 辅助函数:mapMutations

mapMutations和mapState很像,它是把位于mutations中的方法提取了出来,映射到组件methods中

mutation: {subCount (state, n) {state.count -= n},
}
import { mapMutations } from 'vuex'methods: {...mapMutations(['subCount'])
}

相当于

methods: {subCount (n) {this.$store.commit('subCount', n)},
}
* 核心概念-actions

actions的基本语法,用于处理异步操作

说明:mutations必须是同步的(便于监测数据变化,记录调试)

1、提供action方法

actions: {setAsyncCount (context, num) {setTimeout(() => {context.commit('changeCount', num)}, 1000)}
}

2、仍然需要通过mutations

mutations: {changeCount (state, newCount) {state.count = newCount}
}

3、页面中dispatch调用

this.$store.dispatch('setAsyncCount', 200)
* 辅助函数-mapActions

mapActions是把位于actions中的方法提取了出来,映射到组件methods中

即可

import { mapActions } from 'vuex'methods: {...mapActions(['changeCountAction'])
}
* 核心概念-getters

getters的基本语法类似于计算属性

说明:除了state之外,有时我们还需要从state中派生出一些状态,这些状态是依赖state的,此时会用到getters

例如:state中定义了list,为1-10的数组,组件中,需要显示所有大于5的数据

state: {list: [1,2,3,4,5,6,7,8,9,10]
}

1、定义getters

getters: {//注意//(1)getters函数的第一个参数是state//(2)getters函数必须要有返回值filterList (state) {return state.list.filter(item => item > 5)}
}

2、访问getters

通过store访问getters

{{ $store.getters.filterList }}

通过辅助函数mapGetters映射

computed: {...mapGetters(['filterList'])
},

{{ filterList }}

* 核心概念-模块module(进阶语法)

由于vuex使用单一状态树,应用的所有状态会集中到一个比较大的对象。当应用变得非常复杂时,

store对象就有可能变得相等臃肿。

模块拆分:

user模块:store/modules/user.js 

例如:

const state = {userInfo: {name: 'zs',age: 18}
}const mutations = {}
const actions = {}
const getters = {}
export default {state,mutations,actions,getters
}
import user from './modules/user'const store = new Vuex.Store({modules: {user}
}

尽管已经分模块了,但其实子模块的状态,还是会挂到根级别的state中,属性名就是模块名

使用模块中的数据:

1、直接通过模块名访问$store.state.模块名.xxx

2、通过mapState映射

      默认根级别的映射 mapState(['xxx'])

      子模块的映射 mapState('模块名',['xxx']) - 需要开启命名空间

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

使用模块中getters中的数据:

1、直接通过模块名访问$store.getters['模块名/xxx']

2、通过mapGetters映射

      默认根级别的映射 mapGetters(['xxx'])

      子模块的映射 mapGetters('模块名', ['xxx']) - 需要开启命名空间

调用模块中mutation的调用语法

注意:默认模块中的mutation和actings会被挂载到全局,需要开启命名空间,才会挂载到子模块

调用子模块中的mutation:

1、直接通过store调用$store.commit('模块名/xxx', 额外参数)

2、通过mapMutations映射

      默认根级别的映射 mapMutations(['xxx'])

      子模块的映射 mapMutations('模块名' , ['xxx']) - 需要开启命名空间

使用模块中的action:

1、直接通过store调用$store.dispatch('模块名/xxx', 额外参数)

2、通过mapActions映射

      默认根级别的映射 mapActions(['xxx'])

      子模块的映射 mapActions('模块名', ['xxx']) - 开启命名空间

相关文章:

前端(vue)学习笔记(CLASS 7):vuex

vuex概述 vuex是一个vue的状态管理工具,状态就是数据 大白话:vuex是一个插件,可以帮我们管理vue通用的数据(多组件共享的数据) 场景 1、某个状态在很多个组件来使用(个人信息) 2、多个组件…...

[特殊字符] 在 React Native 项目中封装 App Icon 一键设置命令(支持参数与默认路径)

📦 前置依赖 使用的是社区维护的 CLI 工具: @bam.tech/react-native-make它扩展了 react-native 命令,支持 set-icon 功能。 安装: yarn add -D "@bam.tech/react-native-make"🧠 封装目标 我们希望能够通过以下方式调用: # 默认使用 ./icon.png yarn …...

基于深度学习(Unet和SwinUnet)的医学图像分割系统设计与实现:超声心脏分割

基于深度学习的医学图像分割系统设计与实现 摘要 本文提出了一种基于深度学习的医学图像分割系统,该系统采用U-Net和Swin-Unet作为核心网络架构,实现了高效的医学图像分割功能。系统包含完整的训练、验证和推理流程,并提供了用户友好的图形界面。实验结果表明,该系统在医…...

Qt学习及使用_第1部分_认识Qt---学习目的及技术准备

前言 学以致用,通过QT框架的学习,一边实践,一边探索编程的方方面面. 参考书:<Qt 6 C开发指南>(以下称"本书") 标识说明:概念用粗体倾斜.重点内容用(加粗黑体)---重点内容(红字)---重点内容(加粗红字), 本书原话内容用深蓝色标识,比较重要的内容用加粗倾…...

如何把本地服务器变成公网服务器?内网ip网址转换到外网连接访问

​ 内网IP只能在本地内部网络连接访问&#xff0c;当本地搭建服务器部署好相关网站或应用后&#xff0c;在局域网内可以通过内网IP访问&#xff0c;但在外网是无法直接访问异地内网IP端口应用的&#xff0c;只有公网IP和域名才能实现互联网上的访问。那么需要如何把本地服务器变…...

Java+Access综合测评系统源码分享:含论文、开题报告、任务书全套资料

JAVAaccess综合测评系统毕业设计 一、系统概述 本系统采用Java Swing开发前端界面&#xff0c;结合Access数据库实现数据存储&#xff0c;专为教育机构打造的综合测评解决方案。系统包含学生管理、题库管理、在线测评、成绩分析四大核心模块&#xff0c;实现了测评流程的全自…...

湖北理元理律师事务所:债务咨询中的心理支持技术应用

债务危机往往伴随心理崩溃。世界卫生组织研究显示&#xff0c;长期债务压力下抑郁症发病率提升2.3倍。湖北理元理律师事务所将心理干预技术融入法律咨询&#xff0c;构建“法律方案心理支持”的双轨服务模型。 一、债务压力下的心理危机图谱 通过对服务对象的追踪发现&#x…...

时间序列预测:LSTM与Prophet对比实验

时间序列预测&#xff1a;LSTM与Prophet对比实验 系统化学习人工智能网站&#xff08;收藏&#xff09;&#xff1a;https://www.captainbed.cn/flu 文章目录 时间序列预测&#xff1a;LSTM与Prophet对比实验摘要引言实验设计1. 数据集选择2. 实验流程 模型架构对比1. LSTM架…...

阿里云域名怎么绑定

阿里云服务器绑定域名全攻略&#xff1a;一步步轻松实现网站“零”障碍上线&#xff01; 域名&#xff0c;您网站在云端的“身份证”&#xff01; 在数字化浪潮中&#xff0c;拥有一个属于自己的网站或应用&#xff0c;是个人展示、企业运营不可或缺的一环。而云服务器&#x…...

能上Nature封面的idea!强化学习+卡尔曼滤波

2025深度学习发论文&模型涨点之——强化学习卡尔曼滤波 强化学习&#xff08;Reinforcement Learning, RL&#xff09;与卡尔曼滤波&#xff08;Kalman Filtering, KF&#xff09;的交叉研究已成为智能控制与状态估计领域的重要前沿方向。 强化学习通过试错机制优化决策策…...

Linux网桥实战手册:从基础配置到虚拟化网络深度优化

一、网桥基础操作全解析 1. 网桥生命周期管理 创建网桥的两种方式&#xff1a; # 传统brctl工具&#xff08;需安装bridge-utils&#xff09; brctl addbr br0 echo BRIDGEbr0 > /etc/sysconfig/network-scripts/ifcfg-br0# 现代iproute2工具链 ip link add name br0 typ…...

Design Theory and Method of Complex Products: A Review

abstract 摘要 Design is a high-level and complex thinking activity of human beings, using existing knowledge and technology to solve problems and create new things. With the rise and development of intelligent manufacturing, design has increasingly reflec…...

yaffs2目录搜索上下文数据结构struct yaffsfs_dirsearchcontext yaffsfs_dsc[] 详细解析

1. 目录搜索上下文&#xff08;Directory Search Context&#xff09; struct yaffsfs_dirsearchcontext 是 YAFFS2 文件系统中用于 目录遍历操作 的核心数据结构&#xff0c;专门管理 readdir() 等目录操作的状态。 结构体定义&#xff08;典型实现&#xff09; struct yaf…...

Markdown基础(1.2w字)

1. Markdown基础 这次就没目录了&#xff0c;因为md格式太乱了写示例&#xff0c;展示那些都太乱了&#xff0c;导致目录很乱。 &#xff08;我是XX&#xff0c;出现了很多错误&#xff0c;有错误和我说&#xff09; 1.1 Markdown简介 Markdown是一种轻量级的标记语言&#…...

LabVIEW与PLC液压泵测控系统

针对液压泵性能测试场景&#xff0c;采用LabVIEW与西门子 PLC 控制系统&#xff0c;构建高精度、高可靠性的智能测控系统。通过选用西门子 PLC、NI 数据采集卡、施耐德变频电机等&#xff0c;结合LabVIEW 强大的数据处理与界面开发能力&#xff0c;实现液压泵压力、流量、转速等…...

SQL-labs通关(level1-22)

SQL-labs靶场详解 靶场下载 靶场下载地址 关卡 level1联合注入 用order by语句来查询字段数 顺便提一下&#xff0c;使用联合注入语句union select也可以查询字段数&#xff0c;在不能使用order by的情况下&#xff0c;可以使用union select来查询字段数。这里我们通过查询…...

【HarmonyOS5】UIAbility组件生命周期详解:从创建到销毁的全景解析

⭐本期内容&#xff1a;【HarmonyOS5】UIAbility组件生命周期详解&#xff1a;从创建到销毁的全景解析 &#x1f3c6;系列专栏&#xff1a;鸿蒙HarmonyOS&#xff1a;探索未来智能生态新纪元 文章目录 前言生命周期全景图详细状态解析与最佳实践&#x1f3ac; Create状态&#…...

在命令行直接执行可以执行成功,加入crontab定时任务执行shell脚本不成功失败的问题解决方法

今天遇到在命令行直接执行可以执行成功&#xff0c;加入crontab定时任务执行shell脚本却不成功失败的问题&#xff0c;踩坑了很长时间 记录下我的解决方法 原来我的定时任务填写方式: [roottao ~]# crontab -l */10 * * * * /bin/sh /search/index.sh >>/dev/null 2&g…...

c++ 静态成员变量

Student.h头文件内容&#xff1a; #pragma once #include <string> using namespace std;class Student { public:string name;int score;static int totalScore; // 静态局部变量声明Student(string name, int score);~Student();void print() const; };Student.cpp源文…...

分布式爬虫代理IP使用技巧

最近我们讨论的是分布式爬虫如何使用代理IP。在我们日常的分布式爬虫系统中&#xff0c;多个爬虫节点同时工作&#xff0c;每个节点都需要使用代理IP来避免被目标网站封禁。怎么解决代理IP问题显得尤为重要。 我们知道在分布式爬虫中使用代理IP是解决IP封禁、提高并发能力和实…...

数据分析之OLTP vs OLAP

数据处理系统主要有两种基本方法&#xff1a;一种注重数据操作(增删查改)&#xff0c;另一种注重商业智能数据分析。 这两种系统是&#xff1a; 联机事务处理&#xff08;OLTP&#xff09; 联机分析处理&#xff08;OLAP&#xff09; Power BI专为与OLAP系统兼容而构建&…...

Flask音频处理:构建高效的Web音频应用指南

引言 在当今多媒体丰富的互联网环境中&#xff0c;音频处理功能已成为许多Web应用的重要组成部分。无论是音乐分享平台、语音识别服务还是播客应用&#xff0c;都需要强大的音频处理能力。Python的Flask框架因其轻量级和灵活性&#xff0c;成为构建这类应用的理想选择。 本文…...

powershell 安装 .netframework3.5

在 PowerShell 中安装 .NET Framework 3.5 可以通过几种不同的方法实现&#xff0c;取决于你的操作系统版本。以下是几种常见的方法&#xff1a; 方法1&#xff1a;使用 DISM 命令 对于 Windows 10 和 Windows 8.1&#xff0c;你可以使用 DISM&#xff08;Deployment Image Se…...

dvwa5——File Upload

LOW 在dvwa里建一个testd2.php文件&#xff0c;写入一句话木马&#xff0c;密码password antsword连接 直接上传testd2.php文件&#xff0c;上传成功 MEDIUM 查看源码&#xff0c;发现这一关只能提交jpg和png格式的文件 把testd2.php的后缀改成jpg&#xff0c;上传时用bp抓包…...

cv::FileStorage用法

cv::FileStorage 是 OpenCV 中的一个类&#xff0c;用于读取和写入结构化数据&#xff08;如 YAML、XML、JSON&#xff09;。它非常适合保存和加载诸如&#xff1a; 相机内参&#xff08;K、D&#xff09; 位姿&#xff08;R、T&#xff09; IMU 数据 配置参数 向量、矩阵、…...

Go 语言 := 运算符详解(短变量声明)

Go 语言 : 运算符详解&#xff08;短变量声明&#xff09; : 是 Go 语言中特有的​​短变量声明运算符​​&#xff08;short variable declaration&#xff09;&#xff0c;它提供了简洁的声明并初始化变量的方式。这是 Go 语言中常用且强大的特性之一。 基本语法和用途 va…...

【优选算法】C++滑动窗口

1、长度最小的子数组 思路&#xff1a; class Solution { public:int minSubArrayLen(int target, vector<int>& nums) {// 滑动窗口// 1.left0,right0// 2.进窗口( nums[right])// 3.判断// 出窗口// (4.更新结果)// 总和大于等于 target 的长度最小的 子数组…...

关于GitHub action云编译openwrt

特别声明:此教程仅你有成功离线编译的经验后,使用下列教程更佳 不建议没有任何成功经验的人进行云编译 1、准备工作 使用GitHub云编译模板 GitHub - jxjxcw/build_openwrt: 利用Actions在线云编译openwrt固件,适合官方源码,lede,lienol和immortalwrt源码,支持X86,电…...

数据库学习(二)——MySQL语句

MySQL 语句分为&#xff1a; 语句类型作用关键字示例数据查询&#xff08;DQL&#xff09;查询数据SELECT数据操作&#xff08;DML&#xff09;插入、更新、删除数据INSERT, UPDATE, DELETE数据定义&#xff08;DDL&#xff09;定义或修改表结构CREATE, ALTER, DROP事务控制&a…...

AI Agent 架构设计:ReAct 与 Self-Ask 模式对比与分析

一、引言 (一) AI Agent 技术发展背景 &#x1f680; AI Agent 的演进是一场从“遵循指令”到“自主决策”的深刻变革。早期&#xff0c;以规则引擎为核心的系统&#xff08;如关键词匹配的客服机器人&#xff09;只能在预设的流程上运行。然而&#xff0c;大语言模型的崛起为…...