vuex与map映射实现方法梳理分析
作者:旺仔好吃糖 发布时间:2023-07-02 16:34:04
Vuex
vuex执行过程
🎈相当于一个公共的资源库,保存共有的数据
🎈使用场景:点击按钮后,将数据保存到store身上,跳转路由后使用
🎈将actions,mutations(操作数据),state(储存数据),都交给store管理,storez在vc和vm上都有
🎈其中state里面是自定义的一些变量,需要用来保存数据;mutations是用来触发事件,相当于方法,用户需要通过触发这个方法,借此来保存数据;第二个参数为用户传入的值,然后在方法中赋值给state中变量,也可以准备getters对state中的数据进行加工
🎈在组件中通过dispatch将数据传给actions,在actions中的方法中通过commit将数据交给mutations
vuex的使用
📢1. store在vc和vm中均有
📢2. 组件中读取vuex中的数据:$store.state.sum
📢3. 组件中修改vuex中的数据:$store.dispatch(‘action中的方法名’,数据)或 $store.commit(‘mutation中的方法名’,数据)
📢4. 如果组件中没有过多的逻辑业务要求,组件中也可以越过action,即不写dispatch直接编写commit
创建store
//创建store文件夹下的index.js,在main.js中引用,并在new Vue({})加入
//index.js文件中
//store下的index.js
//该文件用于创建Vuex中最重要的Store
import Vue from 'vue'
//引入Vuex
import Vuex from 'vuex'
-----------------------
Vue.use(Vuex)
//创建store
const store = new Vuex.Store({
actions,
mutations,
state,
getters(放入store中操作的属性)
})
//暴露/导出store
export default store
在组件中读取index.js中state中的数据
//组件中
$store.state.sum
组件中修改vuex中的数据:$store.dispatch(‘action中的方法名’,数据)或 $store.commit(‘mutations中的方法名’,数据)
methods:{
increment(){
//没有任何操作逻辑,可以直接通过commit和mutations对话
// this.$store.dispatch('jia',this.n)\
this.$store.commit('JIA',this.n)
},
decrement(){
// this.$store.dispatch('jian',this.n)
this.$store.commit('JIAN',this.n)
},
incrementOdd(){
this.$store.dispatch('jiaOdd',this.n)
},
incrementWait(){
this.$store.dispatch('jiaWait',this.n)
}
}
index.js中对state中数据的操作(actions,mutations,state,getters)
//准备actions----用于响应组件中的动作
const actions ={
//context为上下文 里面含有state等很多
// jia(context,value){
// console.log('actions中的jia被调用了',value);
// context.commit('JIA',value)
// },
// jian(context,value){
// context.commit('JIAN',value)
// },
jiaOdd(context,value){
if(context.state.sum %2){
context.commit('JIA',value)
}
},
jiaWait(context,value){
setTimeout(()=>{
context.commit('JIA',value)
},500)
}
}
//准备mutations---用于操作数据(state)
const mutations = {
JIA(state,value){
console.log('mutations被调用了',state,value);
state.sum += value
},
JIAN(state,value){
state.sum -= value
}
}
//准备state ---- 用于存储数据
const state ={
sum:0
}
getters配置
1.概念:当state中的数据需要通过加工后再使用时,可以使用getters加工
2.再store.js中追加getters配置
---------
//准备getters----用于将state中的数据进行加工
const getters ={
bigSum(state){
return state.sum*10
}
}
//创建store
const store = new Vuex.Store({
actions,
mutations,
state,
getters
})
//暴露,导出store
export default store
3.在组件中读取数据:$store.getters.bigSum
Map映射
mapState方法
computed:{
//借助mapState生成计算属性,sum,school等(对象写法)
...mapState({sum:'sum',school:'school'})
//借助mapState生成计算属性,sum,school等(数组写法)
...mapState(['sum','school'])
}
mapGetters方法:用于帮助我们映射getters中的数据为计算属性
computed:{
//借助mapGetters生成计算属性,sum,school等(对象写法)
...mapGetters({bigSum:'bigSum'})
//借助mapGetters生成计算属性,sum,school等(数组写法)
...mapGetters(['bigSum'])
}
mapActions方法
methods:{
//靠mapActions生成 incrementOdd,incrementWait(对象形式)
...mapActions({incrementOdd:'jiaOdd',incrementWait:'jiaWait'})
//靠mapActions生成 incrementOdd,incrementWait(数组形式)
...mapActions(['jiaOdd','jiaWait'])
}
mapMutations方法
methods:{
//靠mapMutations生成 incrementOdd,decrement(对象形式)
...mapMutations({increment:'JIA',decrement:'JIAN'})
//靠mapMutations生成 JIA,JIAN(数组形式)
...mapMutations(['JIA','JIAN'])
}
但由于this.n参数是自己写进去的,生成方法时无法写入,会自动生成value传入(默认为event),所以可以在组件结构中调用方法时直接传入参数
注:mutations和actions的映射需要写在methods中,getters和state的映射需要写在computed中
来源:https://blog.csdn.net/m0_63338686/article/details/126794104


猜你喜欢
- 小引 笔者认为web开发包括设计html,javascript,css,以及一种高级语言,比如c#,java等等,本文分为三部分,第一部分为
- 又一个js加密工具:js混淆,完整源代码如下,有点长呵呵:<HTML><HEAD><TITLE>Cunf
- 问题背景我创建了一个函数,里面包含了一个获取当前执行文件路径的代码current_path = os.path.dirname(os.pat
- 先来说eval的用法,内容比较简单,熟悉的可以跳过。eval函数接收一个参数s,如果s不是字符串,则直接返回s。否则执行s语句。如果s语句执
- JavaScript组件打包模式js组件通常带着css image ,但这样使用起来可能会有些小麻烦,为了让组件足够的solo,有了把css
- 很多介绍 根据日志等级打印不同颜色 的文章都是介绍的Ideolog , 但是我个人还是倾向于 Grep Console , 你可以在配置界面
- 本文实例为大家分享了python3判断IP地址的具体代码,供大家参考,具体内容如下输入一串字符,判断该字符串是否为点分十进制的IP地址,若是
- 引言在经历过一些尝试之后,觉得在当下的项目中运用链路压测的能力,不等着其他人了。链路这个词其实不如路径通俗易懂,跟产品沟通这个比较有效率。具
- 前言我最近都在写一些Python 3.8的新功能介绍的文章,在自己的项目中也在提前体验新的Python版本。为什么我对这个Python 3.
- Python曾经对我说:"时日不多,赶紧用Python"。于是看到了一个基于python的微信开源库:itchat,玩了
- 本文实例讲述了Windows平台Python连接sqlite3数据库的方法。分享给大家供大家参考,具体如下:之前没有接触过sqlite数据库
- 写入已有文件如需写入已有的文件,必须向 open() 函数添加参数。“a” - 追加 - 会追加到文
- 前言三种场景:多个同字段的excel文件合并成一个excel多个不同字段的excel文件拼接成一个excel一个excel的多个sheet合
- 每个进行过较大型的ASP-Web应用程序设计的开发人员大概都有如下的经历:ASP代码与页面HTML混淆难分,业务逻辑与显示方式绞合,使得代码
- 如何只取数据库的前3条记录?怎么控制只取得前3行数据 这要看是什么类型的数据库了,对于Access和SQ
- 前言 1. 概述共享坐标轴就是几幅子图之间共享x轴或y轴,这一部分主要了解如何在利用matplotlib制图时共享坐标轴。pyplot.s
- vue动态添加表单validateField验证,代码如下所示:<template> <el-f
- 如下所示:1、计算总帧数import osimport cv2video_cap = cv2.VideoCapture('ffmpe
- 导语也许是为了和音,在立冬这一天的人间里北方多个城市,悄然降下冬天的第一场初雪,组成了一段旋律💨一天过两季,黄叶转飞花——从天而降落,昼夜不
- ASP使用xmlhttp获取远程网页内容,解决乱码问题方法一:<%function getHTTPPage(url)on error