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

目录

前言

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 default 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)},// vipvip(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.hqwc.cn/news/258792.html

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

相关文章

SQL Server——权限管理

一。SQL Server的安全机制 SQL Server 的安全性是建立在认证和访问许可两种安全机制之上的。其中&#xff0e;认证用来确定登录Sal Server 的用户的登录账户和密码是否正确&#xff0e;以此来验证其是否具有连接SQL Server 的权限;访问许可用来授予用户或组能够在数据库中执行哪…

C语言精选——选择题Day39

第一题 1. 有下面的定义&#xff0c;则 sizeof(s) 为多少&#xff1f; char *s "\ta\017bc"; A&#xff1a;9 B&#xff1a;5 C&#xff1a;6 D&#xff1a;7 答案及解析 C 本题涉及到了转义字符 \t 是水平制表符&#xff0c;算一个字节 \017 是表示八进制数&#…

整合消息队列RabbitMQ

为什么使用消息队列MQ&#xff1f; 因为使用消息队列有多个好处&#xff1a;可以实现系统服务的解耦、异步和削峰&#xff1a; 异步通信&#xff1a;消息队列提供了一种异步通信的方式&#xff0c;发送方可以将消息发送到队列中&#xff0c;然后继续执行其他任务&#xff0c;…

《Linux源码趣读》| 好书推荐

目录 一. &#x1f981; 前言二. &#x1f981; 像小说一样趣读 Linux 源码三. &#x1f981; 学习路线 一. &#x1f981; 前言 最近、道然科技给狮子送了两本书&#xff1a;一本是付东来的《labuladong的算法笔记》、一本是闪客著的《Linux源码趣读》&#xff0c;《labulado…

基于AIS数据的船舶密度计算与规律研究

参考文献&#xff1a;[1]陈晓. 基于AIS数据的船舶密度计算与规律研究[D].大连海事大学,2021.DOI:10.26989/d.cnki.gdlhu.2020.001129. 谢谢姐姐的文章&#xff01; 网格化AIS数据 网格化 AIS 数据是处理和分析船舶轨迹数据的一种有效方法&#xff0c;特别是当涉及到密度计算和…

unity3d摄像机和观察对象坐标轴修正

让摄像机与观察对象在场景层级并列&#xff0c;以世界坐标看齐 &#xff0c;在local模式&#xff0c;只调整模型或者摄像机方向

案例063:基于微信小程序的传染病防控宣传系统

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder …

多线程并发Ping脚本

1. 前言 最近需要ping地址&#xff0c;还是挺多的&#xff0c;就使用python搞一个ping脚本&#xff0c;记录一下&#xff0c;以免丢失了。 2. 脚本介绍 首先检查是否存在True.txt或False.txt文件&#xff0c;并在用户确认后进行删除&#xff0c;然后从IP.txt的文件中读取IP地…

docker的资源控制

docker容器的资源控制 Docker通过Cgroup 来控制容器使用的资源配额&#xff0c;包括CPU、内存、磁盘三大方面&#xff0c;基本覆盖了常见的资源配额和使用量控制。Cgroup 是ControlGroups的缩写&#xff0c;是Linux 内核提供的一种可以限制、记录、隔离进程组所使用的物理资源(…

自学网络安全的三个必经阶段(含学习笔记)

学习网络安全技术的方法无非三种: 第一种是报网络安全专业&#xff0c;现在叫网络空间安全专业&#xff0c;主要专业课程:程序设计、计算机组成原理原理、数据结构、操作系统原理、数据库系统、 计算机网络、人工智能、自然语言处理、社会计算、网络安全法律法规、网络安全、内…

12.8 作业 C++

使用手动连接&#xff0c;将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在自定义的槽函数中调用关闭函数 将登录按钮使用qt5版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断ui界面上输入的账号是否为"admin"&#xff0c;密码是否为…

一篇文章带你快速入门 Nuxt.js 服务端渲染

1. Nuxt.js 概述 1.1 我们一起做过的SPA SPA&#xff08;single page web application&#xff09;单页 Web 应用&#xff0c;Web 不再是一张张页面&#xff0c;而是一个整体的应用&#xff0c;一个由路由系统、数据系统、页面&#xff08;组件&#xff09;系统等等&#xff0…