Web前端 ---- 【Vue】Vuex的使用(辅助函数、模块化开发)

news2024/11/20 14:21:38

目录

前言

Vuex是什么

Vuex的配置

安装vuex

配置vuex文件

Vuex核心对象

actions

mutations

getters

state

Vuex在vue中的使用

辅助函数

Vuex模块化开发


前言

本文介绍一种新的用于组件传值的插件 —— vuex

Vuex是什么

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式 + 库。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。

也就是说创建一个所有组件都可以共享数据的文件,当一个组件去改变这个共享数据时,其余使用该共享数据的组件中的数据也会改变。

vuex中有一个state属性,state属性中存放着共享的数据

Vuex的配置

安装vuex

vue2项目安装vuex3,vue3安装vuex4

npm i vuex@3

配置vuex文件

在vue cli脚手架文件中,在src中创建vuex文件夹,在vuex文件夹中创建store.js文件

在store.js文件中

先引入vue和安装好的vuex

import Vue from 'vue'

import vuex from 'vuex'

将vuex进行全局挂载

Vue.use(vuex)

创键四个对象

const actions={}
const mutations={}
const state={}
const getters={}

创建store对象

const store = new Vuex.Store({
  actions:actions,
  mutations:mutations,
  state:state,
  getters:getter
})

导出store对象

export dafault store

导出store对象简写

export default new vuex.Store({actions,mutations,state,getters})

store.js文件中初始的配置代码

import Vue from 'vue'

import vuex from 'vuex'

Vue.use(vuex)


const actions={}
const mutations={}
const state ={}
const getters = {}

export default new vuex.Store({actions,mutations,state,getters})

在main.js中配置store配置项

Vuex核心对象

actions

actions对象中都是action函数

通过store.dispath触发该函数

action函数是可以支持任意异步操作的

action函数有两个参数,context和value

context是上下文

value是从组件中传过来的数据

用法

context.commit('mutations中的回调函数',value)

mutations

mutations对象中都是mutation函数

更改 Vuex 的 store 中的状态的唯一方法是提交 mutation

mutation函数就是用来更新state对象中的数据

mutation函数也有两个参数,state和value

mutation函数必须是同步函数

这也就是为什么会有action函数,action函数是可以支持任意的异步操作

getters

getter可以理解为计算属性

相当于组件中的computed

state

共享的数据存放在state中

相当于组件中的data

Vuex在vue中的使用

完成一个案例,在输入框中选择输入用户还是vip,分别添加到名单中,并分别统计两名单人数

以下是具体代码实现

创建两个组件

user和vip

user组件

<template>
  <div>
    <input type="text" v-model="username">
    <button @click="adduser">添加用户</button>
    <ul>
      <li v-for="user in $store.state.users" :key="user.id">
        {{ user.name }}
      </li>
    </ul>
    <h3>用户数量{{$store.state.users.length}}</h3>
    <h3>vip数量{{$store.state.vips.length}}</h3>
  </div>
</template>

<script>
export default {
  name:'userNormal',
  data(){
    return {
      username:''
    }
  },
  methods:{
    adduser(){
      this.$store.dispatch('user',{id:Date.now(),name:this.username})
      this.username=''
    }
  }
}
</script>

vip组件

<template>
  <div>
    <input type="text" v-model="vipname">
    <button @click="addvip">添加vip</button>
    <ul>
      <li v-for="vip in $store.state.vips" :key="vip.id">
        {{ vip.name }}
    </li>
    </ul>
    <h3>用户数量{{$store.state.users.length}}</h3>
    <h3>vip数量{{$store.state.vips.length}}</h3>
  </div>
</template>

<script>
export default {
    name:'vipUser',
    data(){
        return {
            vipname:''
        }
    },
    methods:{
        addvip(){
            this.$store.dispatch('vip',{id:Date.now(),name:this.vipname})
            this.vipname=''
        }
    }
}
</script>

store.js文件

import Vue from 'vue'

import vuex from 'vuex'

Vue.use(vuex)

const actions={
    // 用户
    user(context,value){
        context.commit('saveuser',value)
    },
    // vip
    vip(context,value){
        context.commit('savevip',value)
    }
}
// 更新数据
const mutations={
    saveuser(state,value){
        state.users.push(value)
    },
    savevip(state,value){
        state.vips.push(value)
    }
}
const state ={
    users:[
        {id:'001',name:'张三'},
        {id:'002',name:'李四'},
        {id:'003',name:'王五'}
    ],
    vips:[
        {id:'001',name:'王一'},
        {id:'002',name:'王二'},
        {id:'003',name:'王三'}
    ]
}

export default new vuex.Store({actions,mutations,state})

辅助函数

简化computed计算属性

...mapState()

...mapGetters()

简化methods方法

...mapActions()

...mapMuntations()

分为对象形式和数组形式

例:

...mapState({})和...mapState([ ])

这里使用了es6新语法中的扩展运算符...

扩展运算符浅显的就可以理解为将数组或对象中的数一个个取出来,去掉[ ],对象的话就是去掉{ }

例:

在上面的例子中,插槽中的代码过多,我们可以使用计算属性进行简化

在计算属性中定义两个计算属性,进行代码简化

computed:{
    users(){
      return this.$store.state.users
    },
    vips(){
      return this.$store.state.vips
    }
  }

在此基础上,我们使用辅助函数...mapState(),进一步简化计算属性

这里我们使用的是

...mapState()

简化的是带有$store.state.xxx

数组形式

   computed:{
      ...mapState(['users','vips'])
  },

对象形式

computed:{
    ...mapState({users:'users'},{vips:'vips'})
}

简化getters

computed:{
    reservednusername(){
        return this.$store.getters.reservednusername
      }
}

...mapGetters

简化的是带有$store.getters.xxx

数组形式

computed:{
     ...mapGetters(['reservednusername'])
}

对象形式

computed:{
    ...mapGetters({reservednusername:'reservednusername'})
}

简化methods方法

这里用

...mapActions()

简化 $store.dispatch()分发

对象形式

methods:{
    ...mapActions({adduser:'adduser'})
  }

数组形式

methods:{
    ...mapActions(['adduser'])
}

当代码逻辑简单时,可以直接使用commit提交到mutation函数处理

使用commit时,使用

...mapMutations()

简化 $store.commit()提交

对象形式

 methods:{
   ...mapMutations({adduser:'saveuser'})
  }

数组形式

methods:{
   ...mapMutations(['saveuser'])
  }

注意,数组形式要以mutation函数名为准,点击事件名要换成mution函数同名

Vuex模块化开发

将store.js文件中的内容根据不同页面进行拆分,将拆分的文件导出到store.js文件中

模块化下,组件中要变的不大

在mounted钩子函数中打印this.$store可知

在没有模块化之前

$store.state.users就可以获取到数组

但在模块化后

需要

$store.state.moduleuser.users才可以获取到数组

多一个模块名

因为需要知道获取的是哪个模块里面的数据

同时

在拆分的模块中,需要开启命名空间

namespaced:true

在模块化中使用辅助函数

只需要在前面加上模块名字即可

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

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

相关文章

MDIO读写控制实验

简介&#xff1a; 以太网&#xff1a; 以太网(Ethernet)是当今现有局域网采用的最通用的通信协议标准&#xff0c; 该标准定义了在局域网中采用的电缆类型和信号处理方法。以太网的分类有标准以太网&#xff08;10Mbit/s&#xff09;、 快速以太网(100Mbit/s)和千兆以太网&am…

计算机服务器中了mkp勒索病毒怎么办,mkp勒索病毒解密数据恢复

网络技术的不断发展&#xff0c;也为网络安全带来了威胁&#xff0c;近期云天数据恢复中心的工程师陆续接到很多企业的求助&#xff0c;在本月&#xff0c;很多企业的计算机服务器遭到了mkp勒索病毒攻击&#xff0c;导致企业计算机系统瘫痪&#xff0c;无法正常工作&#xff0c…

苹果 macOS 14.1.2 正式发布 更新了哪些内容?

苹果今日向 Mac 电脑用户推送了 macOS 14.1.2 更新&#xff08;内部版本号&#xff1a;23B92 | 23B2091&#xff09;&#xff0c;本次更新距离上次发布隔了 28 天。 需要注意的是&#xff0c;因苹果各区域节点服务器配置缓存问题&#xff0c;可能有些地方探测到升级更新的时间略…

配置Smart Link主备备份示例

1、Smart Link和Monitor Link简介。 Smart Link&#xff0c;又叫做备份链路。一个Smart Link由两个接口组成&#xff0c;其中一个接口作为另一个的备份。Smart Link常用于双上行组网&#xff0c;提供可靠高效的备份和快速的切换机制。 Monitor Link是一种接口联动方案&#xff…

Navicat 技术指引 | 适用于 GaussDB 分布式的模型功能

Navicat Premium&#xff08;16.3.3 Windows 版或以上&#xff09;正式支持 GaussDB 分布式数据库。GaussDB 分布式模式更适合对系统可用性和数据处理能力要求较高的场景。Navicat 工具不仅提供可视化数据查看和编辑功能&#xff0c;还提供强大的高阶功能&#xff08;如模型、结…

104.进程创建

目录 进程创建相关的函数 获取当前进程的进程ID&#xff08;PID&#xff09; 获取当前进程的父进程ID&#xff08;PPID&#xff09; 创建一个新的进程 fork()剖析 调用格式 创建子进程 子进程与父进程 父子进程执行流 代码演示 进程创建相关的函数 Linux中进程ID为pi…

【用unity实现100个游戏之18】从零开始制作一个类CSGO/CS2、CF第一人称FPS射击游戏——基础篇4(附项目源码,完结)

免责声明:因为文章附带源码,所以我上锁了,整理不易,但是推荐大家自己手动跟敲代码理解更加深入 本节最终效果 文章目录 本节最终效果前言动画拿出枪 静止 检视枪动画切换行走奔跑动画换子弹动画和音效限制跑步和换弹期间不可以射击,换弹期间也不可以检视枪开火动画瞄准动画…

linux文件查找_which_find_locate

7.1 文件查找 7.1.1 简介 which&#xff1a;命令查找 ​ find&#xff1a;文件查找&#xff0c;针对文件名 ​ locate&#xff1a;文件查找&#xff0c;依赖数据库7.1.2 which which命令用于查找文件。 ​ which指令会在环境变量$PATH设置的目录里查找符合条件的文件。 whi…

Appium获取toast方法封装

一、前置说明 toast消失的很快&#xff0c;并且通过uiautomatorviewer也不能获取到它的定位信息&#xff0c;如下图&#xff1a; 二、操作步骤 toast的class name值为android.widget.Toast&#xff0c;虽然toast消失的很快&#xff0c;但是它终究是在Dom结构中出现过&…

在工作中灵活运用CHATGPT

问CHAT&#xff1a;基于微课技术的小学创新课堂教学模式开题&#xff0c;重要变更&#xff0c;侧重说明对照课题申请书、根据评议专家意见所作的研究计划调整 CHAT回复&#xff1a;在本研究项目的开题阶段&#xff0c;我们设想通过利用微课技术来提高小学创新课堂的教学质量。 …

2021年第十届数学建模国际赛小美赛C题读这篇文章有多难解题全过程文档及程序

2021年第十届数学建模国际赛小美赛 C题 读这篇文章有多难 原题再现&#xff1a; 有些英语文本更容易阅读&#xff0c;比如低年级英语考试中出现的阅读材料。然而&#xff0c;有些文本很难阅读&#xff0c;需要读者接受一定程度的教育才能理解。让我们研究一下如何衡量英语文本…

香港高防服务器的选择及几个常见疑问解答

​  互联网的迅猛发展&#xff0c;不仅带来的是机遇&#xff0c;同样也有挑战&#xff0c;比如恶意攻击的频发泛滥&#xff0c;让一些正规企业网站、游戏网站、购物网站等成为了 DDoS 攻击的目标点&#xff0c;所以我们在使用香港服务器时&#xff0c;也不得不为它加一层“护…

【keil备忘录】2. stm32 keil仿真时的时间测量功能

配置仿真器Trace内核时钟为单片机实际的内核时钟&#xff0c;需要勾选Enable设置&#xff0c;设置完成后Enable取消勾选也可以&#xff0c;经测试时钟频率配置仍然生效&#xff0c;此处设置为48MHZ: 时间测量时必须打开register窗口&#xff0c;否则可能不会计数 右下角有计…

智能优化算法应用:基于鹈鹕算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于鹈鹕算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于鹈鹕算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.鹈鹕算法4.实验参数设定5.算法结果6.参考文献7.MATLAB…

Java 使用oshi获取当前服务器状态cpu、内存、存储等核心信息

文章目录 简介相关资料maven依赖oshi-官方示例获取CUP信息代码获取内存信息获取磁盘信息 简介 OSHI 是基于 JNA 的&#xff08;本地&#xff09;操作系统和硬件信息库。它不需要安装任何其他额外的本地库&#xff0c;旨在提供一种跨平台的实现来检索系统信息&#xff0c;例如操…

Clean 架构下的现代 Android 架构指南

Clean 架构下的现代 Android 架构指南 Clean 架构是 Uncle Bob 提出的一种软件架构&#xff0c;Bob 大叔同时也是 SOLID 原则的命名者。 Clean 架构图如下&#xff1a; 这张图描述的是整个软件系统的架构&#xff0c;而不是单体软件&#xff0c;其中至少包括服务端以及客户端…

探秘 JAVA 诞生之路,引领编程人生的宏伟著作

目录 一. 前言 二. Java 发展史 2.1. 1990年年末 2.2. 1991年 2.3. 1992年夏天 2.4. 1994年 2.5. 1995年 2.6. 1996年&#xff08;JDK1.0&#xff09; 2.7. 1997年&#xff08;JDK1.1&#xff09; 2.8. 1998年&#xff08;JDK1.2&#xff09; 2.9. 1999年&#xff0…

第十四章 : Spring Boot 整合spring-session,使用redis共享

第十四章 &#xff1a; Spring Boot 整合spring-session,使用redis共享 前沿 本文重点讲述&#xff1a;spring boot工程中使用spring-session机制进行安全认证&#xff0c;并且通过redis存储session&#xff0c;满足集群部署、分布式系统的session共享。 基于SPringBoot 2.3.2…

hive数据库查看参数/hive查看当前环境配置

文章目录 一、hive查看当前环境配置命令 在一次hive数据库执行命令 set ngmr.exec.modecluster时&#xff0c;想看一下 ngmr.exec.mode参数原先的值是什么&#xff0c;所以写一下本篇博文&#xff0c;讲一下怎么查看hive中的参数。 一、hive查看当前环境配置命令 set &#…

hadoop安装与配置-shell脚本一键安装配置(集群版)

文章目录 前言一、安装准备1. 搭建集群 二、使用shell脚本一键安装1. 复制脚本2. 增加执行权限3. 分发脚本4. 执行脚本5. 加载用户环境变量 三、启动与停止1. 启动/停止hadoop集群(1) 复制hadoop集群启动脚本(2) 增加执行权限(3) 启动hadoop集群(4) 停止hadoop集群(5) 重启hado…