前端vue入门(纯代码)22_四个map

这篇具有很好参考价值的文章主要介绍了前端vue入门(纯代码)22_四个map。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

女为悦己者容,男为悦己者穷。!!!

【23.Vuex中的四个map方法】

[可以去官网看看Vuex3文档](Vuex 是什么? | Vuex (vuejs.org))

1.vuex求和案例—getters版

  • getters概念:当state中的数据需要经过加工后再使用时,可以使用getters加工。【是 store 的计算属性】
  • 【getters理解】:类似是Vuex中的计算属性,也具有缓存功能:如果state中的数据得到了改变,那么getters中的属性的值也会发生改变,如果state的值没有发生任何变化,那么getters中的属性,的值就不会发生改变。

store/index.js

  • getters中配置的属性bigSum(a,b),必须传一个参数:state【这样方便我们对vuex中的共享数据进行操作】;第二个参数:getters【可传,可不传】
  • 前端vue入门(纯代码)22_四个map,Vue前端,前端,vue.js,javascript
//准备getters——用于将state中的数据进行加工【配置定义getters】
const getters = {
	bigSum(state) {
    console.log('getters第一个参数:',state);
    return state.sum*10
  },
};
//准备state——用于存储数据
//数据,相当于data
const state = {
	sum: 0, //当前的和
};

//创建并暴露store
export default new Vuex.Store({
	// property 简写 (用在对象某个 property 的 key 和被传入的变量同名时)
	actions,
	mutations,
	state,
  // 在store中声明getters
  getters,
});

效果展示:

前端vue入门(纯代码)22_四个map,Vue前端,前端,vue.js,javascript

2.vuex求和案例—mapState和mapGetters版

1.mapGetters 辅助函数

将 store 中的 getters 映射到局部计算属性。

  • mapGetters方法:用于帮助我们映射getters中的数据为计算属性

导入mapGetters

//帮助我们将store中的getters部分,映射到本组件中使用。
import { mapGetters } from 'vuex';

使用mapGetters的组件中

computed: {
    //借助mapGetters生成计算属性:bigSum(对象写法)
    ...mapGetters({bigSum:'bigSum'}),

    //借助mapGetters生成计算属性:bigSum(数组写法)
    ...mapGetters(['bigSum'])
},
  • 详细解读一下代码:...mapGetters({bigSum:'bigSum'})
  1. 【…xxx】:对象运算符

  2. mapGetters({bigSum:'bigSum'})】:就是下面代码的简写形式

bigSum(){
    return this.$store.getters.bigSum
}, 
  1. mapGetters({bigSum:'bigSum'})】:不能简写成【mapGetters({bigSum})或mapGetters(){'bigSum'})

  2. {bigSum:'bigSum'}名字一样的话,可以采用数组的方式简写:...mapGetters(['bigSum'])

2.mapState 辅助函数

将 store 中的 state 映射到局部计算属性。

  • mapState方法:用于帮助我们映射state中的数据为计算属性

导入mapState

//帮助我们将store中的state部分,映射到本组件中使用。
import { mapGetters,mapState } from 'vuex';

使用mapState的组件中

computed: {
    //借助mapState生成计算属性,从state中读取数据。(对象写法)
	...mapState({sum:'sum',Sjob:'Sjob',Sname:'Sname'}),

	//借助mapState生成计算属性,从state中读取数据。(数组写法)
    ...mapState(['sum','Sjob','Sname']),  
},
  • 详细解读一下代码:...mapState({sum:'sum',Sjob:'Sjob',Sname:'Sname'})
  1. 【…xxx】:对象运算符

  2. mapState({sum:'sum',Sjob:'Sjob',Sname:'Sname'})】:就是下面代码的简写形式

sum(){
  return this.$store.state.sum
},
Sjob(){
  return this.$store.state.Sjob
},
Sname(){
  return this.$store.state.Sname
}, 
  1. {sum:'sum',...}名字一样的话,可以采用数组的方式简写:...mapState(['sum','Sjob','Sname'])

vuex求和案例—mapState和mapGetters版完整代码:

Count.vue文章来源地址https://www.toymoban.com/news/detail-527730.html

<template>
	<div>
		<h1>当前求和为:{{ sum }}</h1>
		<h3 style="color: red">当前求和放大10倍为:{{ bigSum }}</h3>
		<h3>我叫{{Sname}},是一名{{ Sjob }}</h3>
		<select v-model.number="n">
			<option value="1">1</option>
			<option value="2">2</option>
			<option value="3">3</option>
		</select>
		<button @click="increment">+</button>
		<button @click="decrement">-</button>
		<button @click="incrementOdd">当前求和为奇数再加</button>
		<button @click="incrementWait">等一等再加</button>
	</div>
</template>

<script>
import { mapGetters,mapState } from 'vuex';
export default {
	name: 'Count',
	data() {
		return {
			n: 1,
		};
	},
	computed: {
		//#region
		// 1.不借助mapGetters
		/* 		bigSum() {
			// console.log(this);
			return this.$store.getters.bigSum;
		}, */

		//借助mapGetters生成计算属性,从getters中读取数据。(对象写法)
		// ...mapGetters({bigSum:'bigSum'})

		//借助mapGetters生成计算属性,从getters中读取数据。(数组写法)
		...mapGetters(['bigSum']),
		//#endregion

		//#region
		// 2.不借助mapState
      /*sum(){
          return this.$store.state.sum
        },
        Sjob(){
          return this.$store.state.Sjob
        },
        Sname(){
          return this.$store.state.Sname
        }, */

        //借助mapState生成计算属性,从state中读取数据。(对象写法)
        // ...mapState({sum:'sum',Sjob:'Sjob',Sname:'Sname'}),

	   //借助mapState生成计算属性,从state中读取数据。(数组写法)
       ...mapState(['sum','Sjob','Sname']),
		//#endregion
	},
	methods: {
		increment() {
		// 组件派发【dispatch】任务到actions,然后在actions中触发mutations中的方法
			this.$store.commit('JIA', this.n);
		},
		decrement() {
			this.$store.commit('JIAN', this.n);
		},
		incrementOdd() {
			this.$store.dispatch('jiaOdd', this.n);
		},
		incrementWait() {
			this.$store.dispatch('jiaWait', this.n);
		},
	},
	mounted() {
		console.log('Count', this.$store);
	},
};
</script>

<style scoped>
button {
	margin-left: 10px;
}
select {
	margin-left: 20px;
}
</style>

store/index.js

//该文件用于创建Vuex中最为核心的store
import Vue from 'vue';
//引入Vuex
import Vuex from 'vuex';
//应用Vuex插件
Vue.use(Vuex);

//准备actions——用于响应组件中的动作【接收组件派发过来的方法】
const actions = {
	jiaOdd(context, value) {
		console.log('actions中的jiaOdd被调用了');
		// 这里可以访问到state里存储的数据 sum
		if (context.state.sum % 2) {
			context.commit('JIA', value);
		}
	},

	jiaWait(context, value) {
		console.log('actions中的jiaWait被调用了');
		setTimeout(() => {
			context.commit('JIA', value);
		}, 500);
	},
};
//准备mutations——用于操作数据(state)
const mutations = {
	JIA(state, value) {
		console.log('mutations中的JIA被调用了');
		state.sum += value;
	},

	JIAN(state, value) {
		console.log('mutations中的JIAN被调用了');
		state.sum -= value;
	},
};
//准备getters——用于将state中的数据进行加工【配置定义getters】
const getters = {
	bigSum(state,getters) {
    // console.log('getters第一个参数:',state);
    // console.log('getters第二个参数:',getters);
    return state.sum*10
  },
};
//准备state——用于存储数据
//数据,相当于data
const state = {
	sum: 0, //当前的和
  Sname:'伍六七',
  Sjob:'理发师',
};

//创建并暴露store
export default new Vuex.Store({
	// property 简写 (用在对象某个 property 的 key 和被传入的变量同名时)
	actions,
	mutations,
	state,
  // 在store中声明getters
  getters,
});

3.vuex求和案例—mapMutations和mapActions版

1.mapMutations 辅助函数

将 store 中的 mutations 映射到局部方法。

  • mapMutations方法:用于帮助我们在组件中生成与mutations对话的方法,即:包含$store.commit(xxx)的函数

导入mapMutations

//帮助我们将store中的mutations部分,映射到本组件中使用。
import { mapMutations } from 'vuex';

使用mapMutations的组件中

methods:{
    //借助mapMutations生成对应的方法,方法中会调用commit去联系mutations(对象写法)
    ...mapMutations({ increment: 'JIA', decrement: 'JIAN' }),
    //借助mapMutations生成对应的方法,方法中会调用commit去联系mutations(数组写法)
    ...mapMutations([ 'JIA', 'JIAN' ]),
}
  • 详细解读一下代码:...mapMutations({ increment: 'JIA', decrement: 'JIAN' })
  1. 【…xxx】:对象运算符

  2. mapMutations({ increment: 'JIA', decrement: 'JIAN' })】:就是下面代码的简写形式

【再拆解一下】

  • increment----->increment() {}
  • ‘JIA’----> this.$store.commit(‘JIA’)
increment() {
    // 组件派发【dispatch】任务到actions,然后在actions中触发mutations中的方法
    this.$store.commit('JIA');
},
decrement() {
    this.$store.commit('JIAN');
},
  1. 但是,我们发现commit中没有传数据,所以我们看到页面展示如下:

前端vue入门(纯代码)22_四个map,Vue前端,前端,vue.js,javascript

  1. 那么,我们如何才能把数据传递过去呢?
  • 我们看一下官网给的例子:

  • methods: {
        ...mapMutations([
          'increment', 
      // 将 `this.increment()` 映射为 `this.$store.commit('increment')`
    
          // `mapMutations` 也支持载荷:
          'incrementBy' 
          //  将 `this.incrementBy(amount)` 映射为 
          // `this.$store.commit('incrementBy', amount)`
        ]),
    
  • 所以,可以这样传递数据:increment()---->increment(n)

    <button @click="increment(n)">+</button>
    
    methods:{
        //借助mapMutations生成对应的方法,方法中会调用commit去联系mutations(对象写法)
        ...mapMutations({ increment: 'JIA'}),
    }
    
  • 所以,映射后:increment(n) + { increment: 'JIA'}---映射成--->下面的代码

    increment(n) {
        // 组件派发【dispatch】任务到actions,然后在actions中触发mutations中的方法
        this.$store.commit('JIA',n);
    },
    
  • 最后,去mutations中调用字符串事件JIA

前端vue入门(纯代码)22_四个map,Vue前端,前端,vue.js,javascript

2.mapActions 辅助函数

将 store 中的 actions 映射到局部方法。

  • mapActions方法:用于帮助我们在组件中生成与actions对话的方法,即:包含$store.dispatch(xxx)的函数

导入mapActions

//帮助我们将store中的actions部分,映射到本组件中使用。
import { mapActions } from 'vuex';

使用mapActions的组件中

methods:{
    //借助mapActions生成对应的方法,方法中会调用dispatch去联系actions(对象写法)
    ...mapActions({incrementOdd:'jiaOdd',incrementWait:'jiaWait'})

    //借助mapActions生成对应的方法,方法中会调用dispatch去联系actions(数组写法)
    // ...mapActions(['jiaOdd','jiaWait'])
}
  • 代码我们就不解读:和mapMutations一样。

备注:mapActions与mapMutations使用时,若需要传递参数需要:在模板中绑定事件时传递好参数,否则参数是事件对象。

vuex求和案例—mapActions和mapMutations版完整代码:

Count.vue

<template>
	<div>
		<h1>当前求和为:{{ sum }}</h1>
		<h3 style="color: red">当前求和放大10倍为:{{ bigSum }}</h3>
		<h3>我叫{{ Sname }},是一名{{ Sjob }}</h3>
		<select v-model.number="n">
			<option value="1">1</option>
			<option value="2">2</option>
			<option value="3">3</option>
		</select>
		<button @click="increment(n)">+</button>
		<button @click="decrement(n)">-</button>
		<button @click="incrementOdd(n)">当前求和为奇数再加</button>
		<button @click="incrementWait(n)">等一等再加</button>
	</div>
</template>

<script>
import { mapGetters, mapState, mapMutations, mapActions } from 'vuex';
export default {
	name: 'Count',
	data() {
		return {
			n: 1,
		};
	},
	computed: {
		//#region

		//借助mapGetters生成计算属性,从getters中读取数据。(对象写法)
		// ...mapGetters({bigSum:'bigSum'})

		//借助mapGetters生成计算属性,从getters中读取数据。(数组写法)
		...mapGetters(['bigSum']),
		//#endregion

		//#region
		// 2.不借助mapState
		/*     sum(){
      return this.$store.state.sum
    },
    Sjob(){
      return this.$store.state.Sjob
    },
    Sname(){
      return this.$store.state.Sname
    }, */

		//借助mapState生成计算属性,从state中读取数据。(对象写法)
		// ...mapState({sum:'sum',Sjob:'Sjob',Sname:'Sname'}),

		//借助mapState生成计算属性,从state中读取数据。(数组写法)
		...mapState(['sum', 'Sjob', 'Sname']),
		//#endregion
	},
	methods: {
		//*************程序员亲自写方法******************
		/* increment() {
			// 组件派发【dispatch】任务到actions,然后在actions中触发mutations中的方法
			this.$store.commit('JIA', this.n);
		},
		decrement() {
			this.$store.commit('JIAN', this.n);
		},*/

		//**********借助mapMutations方法****************
		//借助mapMutations生成对应的方法,方法中会调用commit去联系mutations(对象写法)
		...mapMutations({ increment: 'JIA', decrement: 'JIAN' }),
		//借助mapMutations生成对应的方法,方法中会调用commit去联系mutations(数组写法)
		// ...mapMutations([ 'JIA', 'JIAN' ]),

    //*************程序员亲自写方法******************
		/* incrementOdd() {
			this.$store.dispatch('jiaOdd', this.n);
		},
		incrementWait() {
			this.$store.dispatch('jiaWait', this.n);
		}, */

    //**********借助mapMutations方法****************
			//借助mapActions生成对应的方法,方法中会调用dispatch去联系actions(对象写法)
			...mapActions({incrementOdd:'jiaOdd',incrementWait:'jiaWait'})

			//借助mapActions生成对应的方法,方法中会调用dispatch去联系actions(数组写法)
			// ...mapActions(['jiaOdd','jiaWait'])
	},
	mounted() {
		console.log('Count', this.$store);
	},
};
</script>

<style scoped>
button {
	margin-left: 10px;
}
select {
	margin-left: 20px;
}
</style>

到了这里,关于前端vue入门(纯代码)22_四个map的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 前端vue入门(纯代码)11

    【 11.全局事件总线(Global Event Bus) 】 全局事件总线:实现任意组件间通信 【原理图】 结合上图,假若C组件想要传递数据给A组件,那么,就通过全局事件总线在A组件中绑定 【$on】 一个自定义事件demo,并界定一个参数来接收传递的数据,同样在C组件中,就需要通过全局事件

    2024年02月10日
    浏览(53)
  • 前端vue入门(纯代码)21_vuex

    努力不一定成功,但是,不努力一定很轻松!!! 【 23.Vuex 】 [可以去官网看看Vuex3文档](Vuex 是什么? | Vuex (vuejs.org)) 问题1:Vuex是什么? 【官方理解1】:Vuex 是一个专为 Vue.js 应用程序开发的 状态【数据】管理模式 。它采用集中式存储管理应用的所有组件的状态,并以相应

    2024年02月13日
    浏览(55)
  • 前端vue入门(纯代码)35_导航守卫

    星光不问赶路人,时光不负有心人 【 33.Vue Router--导航守卫 】 导航守卫 正如其名, vue-router 提供的导航守卫主要用来通过跳转或取消的方式守卫导航。有多种机会植入路由导航过程中:全局的, 单个路由独享的, 或者组件级的。 记住 参数或查询的改变并不会触发进入/离开的

    2024年02月16日
    浏览(42)
  • 前端vue入门(纯代码)24_Modules

    穷不怪父,苦不责妻,方为真男人! 【 23.Vuex中的模块化和命名空间 】 [可以去官网看看Vuex3文档](Module | Vuex (vuejs.org)) 由于使用单一状态树,应用的所有状态会集中到一个比较大的对象。当应用变得非常复杂时,store 对象就有可能变得相当臃肿。 为了解决以上问题,Vuex 允许

    2024年02月13日
    浏览(54)
  • vue-codemirror实现一个前端代码在线编辑器,可处理 HTML,VUE,JS,CSS代码在线编辑

    先找个目录创建一个vue项目 例如 我们想要项目叫 editor 在终端执行 2和3其实都可以 但个人建议 最近还是2会更稳定一些 在终端执行 引入依赖包 然后在项目src目录下创建 utils 文件夹 里面创建一个setting.js 参考代码如下 然后 这边 调用组件的代码 因为项目也刚创 我直接写 s

    2024年02月15日
    浏览(55)
  • 免费下载xlsx.full.min.js包,并放入前端代码里,在html+vue中引用

    访问 xlsx.js 的 GitHub 页面:https://github.com/SheetJS/sheetjs 在 GitHub 页面中,找到 \\\"Code\\\" 按钮,然后点击它,在下拉菜单中选择 \\\"Download ZIP\\\",以下载 xlsx.js 的最新版本。 解压下载的 ZIP 文件。 在解压后的文件夹中,你会找到 xlsx.full.min.js 文件。将这个文件复制到你的前端项目中,通

    2024年02月02日
    浏览(37)
  • JavaScript - 判断当前时间是否在指定区间内,例如:9:00~12:00(检查当前时间是否处于规定的两个时间段范围内),适用于 vue.js / uniapp / 微信小程序等前端项目

    例如,您想知道当前时间是否处于 9:00 ~ 12:00 时间区间内,然后根据这个判断进而实现业务逻辑。 如下示例所示, 本文提供一个函数,您只需要传入 2 个时间区间,便可得出当前时间是否在该时间区间范围内: 您可以一键复制,直接粘贴到您的项目中。 您只需要传入开始时

    2024年02月16日
    浏览(63)
  • 〖大前端 - 基础入门三大核心之JS篇㉓〗- JavaScript 的「数组」

    当前子专栏 基础入门三大核心篇 是免费开放阶段 。 推荐他人订阅,可获取扣除平台费用后的35%收益,文末名片加V! 说明:该文属于 大前端全栈架构白宝书专栏, 目前阶段免费开放 , 购买任意白宝书体系化专栏可加入 TFS-CLUB 私域社区。 福利:除了通过订阅\\\"白宝书系列专

    2024年02月04日
    浏览(70)
  • [前端系列第3弹]JS入门教程:从零开始学习JavaScript

    本文将带领大家,从零开始学习JavaScript,fighting~ 目录 一、JavaScript简介 二、变量和数据类型 三、注释和分号 四、算术运算符 五、表达式和语句 六、代码块和作用域 七、函数(最重要)          JavaScript(简称JS)是一种运行在浏览器中的脚本语言,它可以让网页变得

    2024年02月13日
    浏览(65)
  • ArcGIS Maps SDK for JavaScript系列之一:在Vue3中加载ArcGIS地图

    ArcGIS Maps SDK for JavaScript 是由 Esri 公司开发的一款用于构建交互式地图应用程序的 JavaScript 库。它提供了丰富的地图显示、分析和可视化功能,适用于各种场景。 目前,ArcGIS Maps SDK for JavaScript 提供两个主要版本:3.x 和 4.x。 ArcGIS Maps SDK for JavaScript 3.x 版本: 3.x 版本是 ArcGIS

    2024年02月13日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包