前端vue入门(纯代码)23_多组件共享

news2024/9/23 7:23:28

我不喜欢去银行,就好像太监不喜欢去妓院一样,有些东西你没有,去了也是难受。

24.Vuex中的多组件状态共享

页面展示:

vuex数据共享完整代码:

App.vue和main.js:就不展示了。

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;
	},

  // 添加人员信息
  addPerson(state,value){
    console.log('mutations中的addPerson被调用了')
    console.log('addPerson',value);
    // array.unshift(A):把A放在array中的第一个;这样添加的数据是响应式的。
    state.personLists.unshift(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:'理发师',
  personLists:[{id:'001',name:'伍六七'}],
};

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

Count.vue

<template>
	<div>
		<h1>当前求和为:{{ sum }}</h1>
		<h3>当前求和放大10倍为:{{ bigSum }}</h3>
		<h3>我叫{{ Sname }},是一名{{ Sjob }}</h3>
    <h3 style="color:red">Person组件的总人数是:{{personLists.length}}</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

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

		//借助mapState生成计算属性,从state中读取数据。(数组写法)
		...mapState(['sum', 'Sjob', 'Sname','personLists']),
		//#endregion
	},
	methods: {

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


		//**********借助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>

Person.vue

<template>
	<div>
		<h1>人员列表</h1>
		<h3 style="color: red">Count组件求和为:{{ sum }}</h3>
		<input type="text" placeholder="请输入名字" v-model="iptName" />
		<button @click="addPerson">添加</button>
		<ul>
			<li v-for="p in personLists" :key="p.id">{{ p.name }}</li>
		</ul>
	</div>
</template>

<script>
import { mapState } from 'vuex';
import {nanoid} from 'nanoid';
export default {
	name: 'Person',
	data() {
		return {
			iptName: '',
		};
	},
	computed: {
		// 完整版代码
		/* 	personLists() {
			return this.$store.state.personLists;
		},
		sum() {
			return this.$store.state.sum;
		}, */
		// 简写
		...mapState(['personLists', 'sum']),
	},
	methods: {
		addPerson() {
			const personObj = {id:nanoid(),name:this.iptName}
            this.$store.commit('addPerson', personObj)
            // 然后清空input框
            this.iptName=''
		},
	},
};
</script>

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

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

相关文章

Verilog学习笔记1:D触发器

代码1&#xff1a; timescale 1ns/10psmodule d_trigger(d,clk,q);input d; input clk; output q;assign q~d;endmodule//testbench module d_trigger_tb; reg clk; reg d; wire q;d_trigger d_trigger(.d(d),.clk(clk),.q(q));initial begind<0;clk<0;#1000 $stop;end…

异步电路后端实现流程(cdc signOff 后端做什么)

目录 1.一种后端异步电路的signOff流程 2.cdc maxDelay的原因及relax 2.1为什么要做maxDelay检查 2.2 如果有不同名字的clk 原本是同步时钟域 该怎么办 2.3 如果有异步电路不能满足0.7倍的fastclk maxDelay检查该怎么办&#xff1f; 1.一种后端异步电路的signOff流程 同步…

Openpyxl给同个单元格的不同文字“上色”

文章目录 0.背景1. 原文代码2. 我的代码3. 总结 0.背景 openpyxl一直在用&#xff0c;今天看到一直关注的公众号又发出了奇技淫巧&#xff08;想要看原文或者要关注原作者的可以点击这里&#xff09;&#xff0c;就直接收录到主页好了。免得以后找不到了。 1. 原文代码 原来…

全网最详细,Fiddler抓包实战 - 手机APP端https请求(超详细)

前言 Fiddler抓取App端请求 准备工作&#xff1a; 将手机和电脑连接到同一路由器&#xff08;保证两者能够ping通&#xff09;&#xff1b; 如果使用的模拟器则不需要上面的步骤&#xff0c;因为模拟器是共享PC端的网络&#xff0c;两者网络默认就是连通的状态&#xff1b; 查…

【聘】夏日炎炎,高薪IT好岗位给你降温!

微思就业推荐 厦门海翼集团财务有限公司 职位&#xff1a;数字化管理部运维管理岗 6000-12000元/月*18薪 职位描述 负责公司日常办公IT设备、网络及机房服务器、业务系统的管理。 1、负责公司机房、服务器、网络设备规划、建设、管理、巡检&#xff1b;负责建立包括但不…

【Servlet综合项目练习】实现一个简单的博客系统~

目录 &#x1f31f;一、数据库设计部分 1、建表分析&#xff1a;系统中一共要实现几张表&#xff1f; 2、开始建表 &#x1f31f;二、大概框架与实现功能 &#x1f31f; 三、代码实现部分 &#x1f308;前言1&#xff1a;工具类的实现&#xff08;utils包下&#xff09;…

2023年开放式蓝牙耳机选购指南!南卡/韶音/Cleer/索尼/飞利浦等开放式耳机怎么选!最热的开放式蓝牙耳机大盘点!

前言 大家好&#xff0c;作为专注耳机研究多年的发烧级爱好者&#xff0c;毫不夸张的说我为耳机花的钱比买衣服还多&#xff0c;很多人都在问我开放式耳机到底有没有必要买&#xff1f;答案毫无疑问是有必要&#xff01;开放式耳机佩戴舒适又安全的特质让它在耳机届风靡&#…

动态SLAM论文(7) — DOT: Dynamic Object Tracking for Visual SLAM

目录 1 Introduction 2 Related work 3 DOT A 系统概述 B. 实例分割 C. 相机和物体跟踪 D. 跟踪质量、异常值和遮挡 E. 目标是否在运动&#xff1f; F. 掩码传播 4 Experimental results 5 Conclusions 摘要 - 本文我们介绍了DOT&#xff08;Dynamic Object Trackin…

计算机网络实验报告——Wireshark 抓包分析

1. Wireshark软件下载 这里放一个蓝奏云下载链接&#xff1a; https://wwix.lanzoue.com/iEklv11klvje 密码:4g0n 2. Wireshark软件抓包使用 将该软件安装之后&#xff0c;双击打开&#xff0c;首先选择你的过滤器方式&#xff0c;我这里电脑连的是WiFi&#xff0c;就选择了这…

分布式搜索--elasticsearch

一、初识 elasticsearch 1. 了解 ES ① elasticsearch 是一款非常强大的开源 搜索引擎&#xff0c;可以帮助我们从海量数据中 快速找到需要的内容 ② elasticsearch 结合 kibana、Logstash、 Beats&#xff0c;也就是 elastic stack (ELK)&#xff0c;被 广泛应用在日志数据分…

【CANoe示例分析】PythonCAPL_Call_Demo

该工程由Vector官方提供,目的是演示Python如何调用CAPL文件里的自定义函数。里面除了CANoe工程文件外,还有python文件和CAPL: 提供了两种CANoe版本的工程文件,选择其中一种打开即可。 首先我们要确定CAPL文件AnalyseFunctions.can在CANoe工程内的什么地方?首先想到的是Si…

Apache Doris 在金融壹账通指标中台的应用实践

本文导读&#xff1a; 金融壹账通作为中国平安集团的联营公司&#xff0c;依托平安集团 30 多年金融行业的丰富经验及自主科研能力&#xff0c;向客户提供“横向一体化、纵向全覆盖”的整合产品&#xff0c;以“技术业务”为独特竞争力&#xff0c;帮助客户提升效率、提升服务…

vuex中的四个map方法的使用

vuex中的四个map方法的使用 vuex里面有四个map方法&#xff0c;他们分别可以针对不同的元素进行不同的代码生成 这四个map方法都是异曲同工&#xff0c;明白了一个基本上都明白了 1 编写案例 现在想要展示一段文本&#xff0c;其中里面两个参数要存在store的state里面&…

怎样优雅地增删查改(二):扩展身份管理模块

文章目录 用户关系管理扩展组织管理功能创建可查询仓储 实现控制器测试接口 身份管理模块&#xff08;Identity模块&#xff09;为通用查询接口的按组织架构查询和按户关系查询提供查询依据。 身份管理模块的领域层依赖Volo.Abp.Identity.Domain Abp为我们实现了一套身份管理模…

CentOS 7镜像下载 以及 DVD ISO 和 Minimal ISO 等各版本的区别介绍

1.官网下载 官网下载地址&#xff1a;官网下载链接 点击进入下载页面&#xff0c;随便选择一个下载即可&#xff08;不推荐&#xff0c;推荐阿里云下载&#xff0c;见下文&#xff09; 阿里云下载站点&#xff08;速度非常快推荐&#xff09; 阿里云下载链接&#xff1a; http…

免费下载!10个3D素材网站推荐

在设计工作中&#xff0c;3D素材可以帮助设计师创建高质量的UI设计&#xff0c;提高设计效率和准确性。本文将为您推荐10个好用的3D素材网站&#xff0c;助力设计师实现高效创作。 1.即时设计资源广场 即时设计资源广场是一个致力于为设计师提供丰富多样的设计资产和灵感的社…

chatgpt 与传统3D建模对比分析

推荐&#xff1a;将NSDT场景编辑器加入你的3D工具链 随着人工智能技术的发展&#xff0c;越来越多的领域正逐渐被AI模型所取代。ChatGPT作为一种自然语言处理技术&#xff0c;越来越为人们所熟悉。最近&#xff0c;一些3D建模领域的专家想知道ChatGPT是否可以取代传统的手动3D建…

ClickHouse主键索引最佳实践

在本文中&#xff0c;我们将深入研究ClickHouse索引。我们将对此进行详细说明和讨论&#xff1a; ClickHouse的索引与传统的关系数据库有何不同ClickHouse是怎样构建和使用主键稀疏索引的ClickHouse索引的最佳实践 您可以选择在自己的机器上执行本文给出的所有Clickhouse SQL…

C++之Clang属性大全(一百五十一)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

NC65自由报表参数设置后,报表发布成节点后,点击查询,在查询框输入条件后,参数值没有拼接到sql中的解决方法

NC65自由报表参数设置后&#xff0c;报表发布成节点后&#xff0c;点击查询&#xff0c;在查询框输入条件后&#xff0c;参数值没有拼接到sql中的解决方法 在语义分析模型中把sql语句放进去&#xff0c;把字段和查询查询设置好 语义模型的sql使用了parameter把参数输入 sel…