【Vue】VueX仓库

       📝个人主页:五敷有你      

 🔥系列专栏:Vue

⛺️稳中求进,晒太阳

目录

Vue概述

是什么

场景:

优势

构建多组件共享环境

创建一个空仓库

核心概念 - state 状态

1. 提供数据

2.使用数据

​编辑

通过辅助函数(简化)

核心概念 - mutations

步骤:

传参:

辅助函数:mapMutations

核心概念 - actions

辅助函数

核心概念 - getters

步骤

     通过辅助函数mapGetters映射

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

使用模块中的数据

state

getters

mutation


Vue概述

是什么

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

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

场景:

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

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

优势

  1. 共同维护一份数据,数据集中化管理
  2. 响应式变化
  3. 操作简洁(vuex提供了一些辅助函数)

构建多组件共享环境

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

创建一个空仓库

目标:安装vuex插件,初始化一个空仓库

  1. yarn add vuex@3
    1. npm install vuex@3 --save
  2. 新建store/index.js 专门存放vuex
  3. Vue.use(Vuex)
    1. 创建仓库new Vuex.Store
//这里存放的是vuex相关的核心代码 目录 store/index.js
import Vue from 'vue'
import Vuex from 'vuex'//安装插件
Vue.use(Vuex)//创建仓库
const store=new Vuex.Store()export default store

        4. 在main.js导入挂载

new Vue({render: h => h(App),store:store
}).$mount('#app')

核心概念 - state 状态

目标:明确如何给仓库提供数据,如何 使用 仓库的数据

1. 提供数据
  1. State提供唯一的公共数据源,所有共享数据都要统一放到Store中的State中存储
  2. 在state对象中,可以添加我们要共享的数据
//这里存放的是vuex相关的核心代码
import Vue from 'vue'
import Vuex from 'vuex'//安装插件
Vue.use(Vuex)//创建仓库
const store=new Vuex.Store({//state 状态,即数据,类似于Vue组件中data/**区别:* 1.data是组件自己的数据* state是所有组件共享的数据*/state:{count:101}
})export default store
2.使用数据

   1.通过store直接访问

通过辅助函数(简化)

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

<template><div>{{ title }}</div>
</template>
<script>
//导入mapState
import { mapState } from "vuex"export default({created(){console.log(this.$store.state.title)},computed:{//展开运算符映射...mapState(["count",'title'])}
})
</script>
<style scoped>
</style>

核心概念 - mutations

目标:明确vue同样遵循单向数据流。组件不能直接修改仓库的数据,掌握mutations的操作流程,来修改state数据,state数据的修改只能通过mutations

通过 strict:true 开启严格模式(检测错误语法)

步骤:

  1. 定义mutations对象,对象中存放修改state的方法
const store=new Vuex.Store({//state 状态,即数据,类似于Vue组件中data/**区别:* 1.data是组件自己的数据* state是所有组件共享的数据*/state:{count:101,title:"我是大标题"},//定义mutationsmutations:{//第一个参数是state属性addCount(state){state.count+=1;}}
})

        组件中提交调用mutations

  addCount(){this.$store.commit("addCount");}

传参:

目标:掌握mutations传参语法

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

  1. 提供mutation函数(带参数-提交载荷payload)提交载荷只有一个参数
const store=new Vuex.Store({//state 状态,即数据,类似于Vue组件中data/**区别:* 1.data是组件自己的数据* state是所有组件共享的数据*/state:{count:101,title:"我是大标题"},//定义mutationsmutations:{//第一个参数是state属性addCount(state,n){state.count+=1;}}
})

 页面中提交调用mutation

 addCount(){this.$store.commit("addCount",10);}

 注意mutation参数有且只有一个参数,如果需要多个参数,包装成一个对象

辅助函数:mapMutations

目标:掌握辅助函数mapMutations,映射方法

mapMutations和mapState很像,他是位于mutations中的方法提取出来,映射到组件method中

核心概念 - actions

目标:明确actions的基础语法,处理异步操作

需求:一秒之后,修改state的count成666

场景:发请求

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

步骤

1:提供action方法

  actions:{setAsyncCount(context,num){//context相当于store仓库,num为额外传参//一秒后,给一个数,去修改numsetTimeout(()=>{context.commit("changeCount",num)},1000)}}

步骤2:页面中dispatch调用

     <button @click="$store.dispatch('setAsyncCount',666)">修改count</button>

辅助函数

mapActions是把位于action中的方法提取出来,映射到组件method中

    import { mapActions, mapState } from "vuex"import { mapMutations } from "vuex";
export default({methods:{...mapMutations(["addCount"]),...mapActions(["setAsyncCount"]),changeInp(e){this.$store.commit("changeTitle",e.target.value)}},等价于<=>setAsyncCount(n){this.$store.dispatch("changeCountAction",n)}

核心概念 - getters

目标:掌握核心概念getters的基础语法(类似计算属性)

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

步骤

  1. 定义getters
  //定义gettersgetters:{//getters函数的第一个参数是state//getters函数必须要有返回值filtetList(){return state.list.filtetList(item=>item>5)}},

   2.  访问getters

         通过store访问getters

{{$store.getters.filterList)}}

     通过辅助函数mapGetters映射

 computed:{...mapState(["count",'title']),...mapGetters(['filterList'])}{{filterList}}

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

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

store对象就会有可能变得相当臃肿,难以维护

模块拆分

user模块 store/modules/user.js

const state={userInfo:{name:'Rys',age:20}
}
const mutations={}
const actions={}
const getters={}
export default{state,mutations,actions,getters
}

在store/index.js下配置

const store=new Vuex.Store({ modules:{ user } }

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

使用模块中的数据

state
  1. 直接通过模块名访问
    1. $store.state.模块名.xxx
  2. 通过mapState映射
    1. 默认跟级别的映射 mapState(['xxx'])
    2. mapState('模块名',['xxx']) - 需要开启命名空间

export default{ namespaced:true, state, mutations, actions, getters } ...mapState("user",['userInfo']),

getters

使用模块中 getter 中的数据:

  1. 直接通过模块名访问 $store.getters['模块名/xxx']
  2. 通过mapGetters 映射
    1. 默认根组件映射 mapGetters(['xxx'])
    2. 子模块的映射 mapGetters('模块名',['xxx']) - 需要开启命名空间
mutation

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

调用子模块的mutation:

  1. 直接通过store 调用 $store.commit('模块名/xxx',额外参数)
  2. 通过mapMutations映射
    1. 默认跟级别映射mapMutation[’xxx‘]
    2. 子模块的模块mapMutation["模块名",['xxx']] -- 需要开启命名空间

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

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

相关文章

结合大象机器人六轴协作机械臂myCobot 280 ,解决特定的自动化任务和挑战!(上)

项目简介 本项目致力于探索和实现一种高度集成的机器人系统&#xff0c;旨在通过结合现代机器人操作系统&#xff08;ROS&#xff09;和先进的硬件组件&#xff0c;解决特定的自动化任务和挑战。一部分是基于Jetson Orin主板的LIMO PPRO SLAM雷达小车&#xff0c;它具备自主导航…

ELF 1技术贴|在NXP源码基础上适配开发板的按键功能

本次源代码适配是在NXP i.MX6ULL EVK评估板的Linux内核源代码&#xff08;特定版本号为Linux-imx_4.1.15&#xff09;的基础中展开的。 首要任务集中在对功能接口引脚配置的精细调整&#xff0c;确保其能无缝匹配至ELF 1开发板。接下来&#xff0c;我们将详细阐述适配过程中关…

MapReduce内存参数自动推断

MapReduce内存参数自动推断。在Hadoop 2.0中&#xff0c;为MapReduce作业设置内存参数非常繁琐&#xff0c;涉及到两个参数&#xff1a;mapreduce.{map,reduce}.memory.mb和mapreduce.{map,reduce}.java.opts&#xff0c;一旦设置不合理&#xff0c;则会使得内存资源浪费严重&a…

KingbaseES-V8R3下载安装及基础配置以及创建用户数据库

KingbaseES-V8-R3安装 1 下载准备安装包 下载地址&#xff1a;https://gitlab.cn/renfei/KingbaseES-V8-R3 准备好安装包及license.dat文件上传至服务器 2 挂载安装包 安装包为iso文件&#xff0c;需要挂载到目录 mount KingbaseES_V008R003C002B0340_Lin64_install.iso /…

Day 6.有名信号量(信号灯)、网络的相关概念和发端

有名信号量 1.创建&#xff1a; semget int semget(key_t key, int nsems, int semflg); 功能&#xff1a;创建一组信号量 参数&#xff1a;key&#xff1a;IPC对像的名字 nsems&#xff1a;信号量的数量 semflg&#xff1a;IPC_CREAT 返回值&#xff1a;成功返回信号量ID…

5G智能制造热力工厂数字孪生可视化平台,推进热力行业数字化转型

5G智能制造热力工厂数字孪生可视化平台&#xff0c;推进热力行业数字化转型。在当今这个信息化、数字化的时代&#xff0c;热力生产行业也迎来了转型的关键时刻。为了提升生产效率、降低成本、提高产品质量&#xff0c;越来越多的热力生产企业开始探索数字化转型之路。而5G智能…

SAP 工单CO02删除标记设置增强

需求&#xff1a;工单打上删除标记时检查&#xff0c;满足才能打上删除标记 位置&#xff1a;PPCO0002 -> EXIT_SAPLCORO_001 -》INCLUDE ZXCO1U02.中 如果没有&#xff0c;就新建 然后写下代码测试&#xff1a; MESSAGE test TYPE I. 然后就可以写下自己要的检查了&…

three.js如何实现简易3D机房?(一)基础准备-下

接上一篇&#xff1a; three.js如何实现简易3D机房&#xff1f;&#xff08;一&#xff09;基础准备-上&#xff1a;http://t.csdnimg.cn/MCrFZ 目录 四、按需引入 五、导入模型 四、按需引入 index.vue文件中 <template><div class"three-area">&l…

基于springboot+vue实现会议室预约系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现会议室预约系统演示 摘要 一个企业的发展离不开相关的规定流程。信息化到来的今天在我们的生活当中。离不开各种信息化的支持。比如钉钉会议预约、美团买菜、扫码签到等各种信息化软件。他们涉及我们生活中的方方面面给我们的生活提供了更大的便利性。大到政…

css网格布局简单介绍

前端网格布局是一种用于在网页上创建复杂网格系统的布局技术。它允许开发者通过简单的语法来定义和控制元素的排列方式&#xff0c;使得页面布局更加灵活和可预测。在CSS中&#xff0c;网格布局可以通过display: grid属性来实现。 特点 1. **灵活性**&#xff1a;网格布…

微信小程序开发系列(十一)·小程序页面的跳转设置以及参数传递

目录 1. 跳转到商品列表 1.1 url: 当前小程序内的跳转链接 1.2 navigate&#xff1a;保留当前页面&#xff0c;跳转到应用内的某个页面。但是不能跳到 tabbar 页面 1.3 redirect&#xff1a; 关闭当前页面&#xff0c;跳转到应用内的某个页面。但不能跳转到 tabbar 页面…

在 Flutter 中使用 flutter_gen 简化图像资产管理

你是否厌倦了在 Flutter 项目中手动管理图像资产的繁琐任务&#xff1f; 告别手工输入资源路径的痛苦&#xff0c;欢迎使用“Flutter Gen”高效资源管理的时代。在本文中&#xff0c;我将带您从手动处理图像资源的挫折到动态生成它们的便利。 选择1&#xff1a;痛苦手动添加–…

Jenkins如何做到parameter页面里2个参数的联动

在Jenkins中&#xff0c;参数化构建是一种非常有用的功能&#xff0c;它可以让用户在构建过程中输入参数&#xff0c;从而实现更灵活的构建流程。有时候&#xff0c;我们希望两个参数之间能够实现联动&#xff0c;即一个参数的取值会影响另一个参数的取值。要实现这样的功能&am…

ChatGPT编程省钱、方便小示例——实现PDF转成PNG文件

ChatGPT编程省钱、方便小示例——实现PDF转成PNG文件 今天登录一个网站发现一个pdf文件很漂亮&#xff0c;于是想下载下来转成png图片。 于是用wps软件打开&#xff0c;然后进行转换。。。。。。 果然天下没有免费的午餐。既然AI时代已经到来&#xff0c;那就交给无所不能的AI…

DataGrip 连接 Centos MySql失败

首先检查Mysql是否运行&#xff1a; systemctl status mysqld &#xff0c; 如果显示没有启动则需要启动mysql 检查防火墙是否打开&#xff0c;是否打开3306的端口 sudo firewall-cmd --list-all 如果下面3306没有打开则打开3306端口 publictarget: defaulticmp-block-inver…

2195. 深海机器人问题(网络流,费用流,上下界可行流,网格图模型)

活动 - AcWing 深海资源考察探险队的潜艇将到达深海的海底进行科学考察。 潜艇内有多个深海机器人。 潜艇到达深海海底后&#xff0c;深海机器人将离开潜艇向预定目标移动。 深海机器人在移动中还必须沿途采集海底生物标本。 沿途生物标本由最先遇到它的深海机器人完成采…

【自动驾驶技术系列丛书学习】1.《自动驾驶技术概论》学习笔记

《自动驾驶技术概论》学习笔记 致谢&#xff1a;作者&#xff1a;王建、徐国艳、陈竞凯、冯宗宝 -------------------------------------------------------------------------------------------------------- 笔记目录 《自动驾驶技术概论》学习笔记 1.汽车发展史 2.国…

Docker常用基础指令

目录 1 前言 2 常用指令 2.1 获取帮助 2.2 拉取镜像到本地 2.3 对本地镜像进行打包 2.4 对本地镜像的删除 2.5 通过tar包加载本地镜像 2.6 查看所有镜像 2.7 创建新的容器 2.8 查看容器 2.9 停止容器运行 2.10 运行容器 2.11 删除容器 2.12 查看容器日志 2.13 进…

如何使用 ArcGIS Pro 统计四川省各市道路长度

在某些时候&#xff0c;我们需要进行分区统计&#xff0c;如果挨个裁剪数据再统计&#xff0c;不仅步骤繁琐、耗时&#xff0c;还会产生一些多余的数据&#xff0c;这里教大家如何在不裁剪数据的情况下统计四川各市的道路长度&#xff0c;希望能对你有所帮助。 数据来源 教程…

【MySQL】视图 -- 详解

视图 是一个虚拟表&#xff0c;其内容由查询定义。同真实的表一样&#xff0c;视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表&#xff0c;基表的数据变化也会影响到视图。 一、基本使用 1、创建视图 create view 视图名 as select 语句; 好处&#xff1a;…