【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,一经查实,立即删除!

相关文章

Linux系统运维脚本:批量创建linux用户和密码(读取文件中的账号和密码来批量创建用户)

目 录 一、要求 二、解决方案 &#xff08;一&#xff09;解决思路 &#xff08;二&#xff09;方案 三、脚本程序实现 &#xff08;一&#xff09;脚本代码和解释 1、脚本代码 2、代码解释 &#xff08;二&#xff09;脚本验证 1、脚本编辑 2、给予执行权…

结合大象机器人六轴协作机械臂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 /…

Oracle中使用alter table move命令的方法降低表中的高水位(High Water Mark)

Oracle中使用alter table move命令的方法降低表中的高水位&#xff08;High Water Mark&#xff09; 导读 在Oracle数据库中&#xff0c;“高水位”&#xff08;High Water Mark&#xff09;是指表中数据的存储位置已经达到的最高位置。在表中插入、更新或删除数据时&#xff0…

裸机程序--时间片调度

1.为什么自己写一个时间片调度呢 a. 网上其实有很多成熟的时间片调度例程, 包括我最开始参加工作也是抄的网上的例程(还记得当时领导问我看明白了它的调度原理吗, 作为一个自学刚参加工作的我来说, 看懂别人的意思真的很难, 当时只能含糊其词的说看得差不多) b. 在我看来网上的…

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…

Java 中进行数据类型的强制转换

在Java中&#xff0c;数据类型的强制转换是指将一个数据类型的值转换为另一种数据类型的操作。这在编程中经常会用到&#xff0c;特别是在需要将不同类型的数据进行计算或者比较时。Java中的数据类型强制转换分为两种&#xff1a;隐式转换和显式转换。 1、隐式转换&#xff08…

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

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

Linux-网络相关函数接口-012

1.UDP编程 socket套接字编程 1.1【socket】 1.1.1函数原型 【int socket(int domain, int type, int protocol);】 1.1.2函数功能 创建一个用来通信的文件描述符1.1.3函数参数 【domain】&#xff1a;使用的协议族 AF_INET (IPv4协议族) 【type】&#xff1a;套接字类型【…

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

将nodejs项目打包为exe方便在没有Node的环境中部署

nodejs21之前可以使用pkg&#xff0c;21版本之后支持单个可执行应用程序 https://github.com/vercel/pkg?tabreadme-ov-file https://nodejs.org/api/single-executable-applications.html 这样能解决服务器上没有exe的问题了 Windows中使用WinSW工具进行服务的安装

css网格布局简单介绍

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

python基础使用之“__name__==‘__main__‘”作用

if __name__ "__main__": 是一个常见的 Python 编程习惯&#xff0c;其作用是在一个 Python 模块被直接运行时执行一些特定的代码&#xff0c;而不是被导入到其他模块中。这个条件语句检查模块的 __name__ 属性是否等于 "__main__"。 当一个 Python 模块…

288.【华为OD机试】AI面板识别(排序算法—JavaPythonC++JS实现)

🚀点击这里可直接跳转到本专栏,可查阅顶置最新的华为OD机试宝典~ 本专栏所有题目均包含优质解题思路,高质量解题代码(Java&Python&C++&JS分别实现),详细代码讲解,助你深入学习,深度掌握! 文章目录 一. 题目二.解题思路三.题解代码Python题解代码JAVA题解…

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

目录 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;痛苦手动添加–…