React——组件通讯

组件通讯介绍

组件中的状态是私有的,组件的状态只能在组件内部使用,无法直接在组件外使用,但是我们在日常开发中,通常会把相似、功能完整的应用才分成组件(工厂模式)利于我们的开发,而不同组件直接又需要传递数据,而这个过程就是组件通讯。

组件通讯-父子间、兄弟间传值props

props,学过vue的其实我们都很熟悉,都是父组件传递给子组件的一种方式。

props 是只读对象,只能读取属性,无法修改,属于单向数据流。

根本作用:接收(其他组件)传递给当前组件的数据

如何传递

// 传递数据:给组件标签添加属性 用{}内部传入数据,数据类型依据输入决定
<New userName='hyy' id={'1233414'} />

函数组件接受,参数props直接接受

// 接收数据(函数组件):
// props :{ userName='hyy' id={'1233414'} }
function getProps(props) {return (<div><div>{props.userName}</div><div>{props.id}</div></div>)
}

Class组件接受,this.props接受

// 接收数据(类组件):
// this.props :{ userName='hyy' id={'1233414'} }
class New extends Component {render() {return (<div><div>{this.props.userName}</div><div>{this.props.id}</div></div>) }
}
组件通讯-父传子 props 代码示例
// 父组件传值
class Parent extends React.Component {state = { userName: 'hyy' }render() {return (<div><Child userName={this.state.userName} /></div>)}
}
// 子组件获取 函数组件
function Child(props) {return <div>{props.userName}</div>
}
// 子组件获取 类组件
class Child extends React.Component {render(){return <div>{this.props.userName}</div>}
}
组件通讯-子传父 props 代码示例

跟vue很像,通过props传递回调函数给子组件,子组件调用函数传递参数给父组件

// 声明一个回调函数,传递给子组件
class Parent extends React.Component {getChildData = (data) => {console.log('子组件数据传递的数据', data)}render() {return (<div><Child getData={this.getChildData} /></div>)}
}
// 子组件调用函数,通过传递参数传递给父组件
class Child extends React.Component {state = { childData: '子传父 props' }handleClick = () => {this.props.getData(this.state.childData)}return (<button onClick={this.handleClick}>传递数据给父元素</button>)
}
组件通讯-兄弟组件 props 代码示例

状态提升:将共享状态提升到最近的公共父组件中,由公共父组件管理这个状态

核心内容:把共同的父组件当中eventBus的数据处理中心

import React, { Component } from 'react'
import ReactDOM from 'react-dom'
import Bor1 from './bor1'
import Bor2 from './bor2'
// 父组件
class App extends Component {state = {borData: '',}render() {// 给兄弟1传递改变方法,给兄弟2传递被改变的值return (<div<Bor1 change={this.changebor2Data}>兄弟组件1</Bor1> <Bor2 borData={this.state.borData}>兄弟组件2</Bor2></div>)}// 兄弟1传递给兄弟2 borData的修改方法changebor2Data = (borData) => {this.setState({borData,})}
}
ReactDOM.render(<App />, document.getElementById('root'))
// 兄弟组件1
import React, { Component } from 'react'export default class Bor1 extends Component {render() {return (<div><button onClick={this.change}>改变兄弟2的值</button></div>)}change = () => {this.props.changebor2Data('兄弟2值改变了')}
}
// 兄弟组件2
import React, { Component } from 'react'export default class Bor2 extends Component {render() {return (<div>{this.props.borData}</div>)}
}

组件通讯 - 跨级组件 Context(不常用,但是是redux的基础)

context实现跨级组件通讯

步骤:1、在最高级组件中创建一个context对象 createContext

​ 2、用解构赋值 解构出Provider,Consumer

​ 3、利用Provider最外层应用,通过value=“data” ,提供共享的数据

data一般是个对象,传递state的值或者当前组件的方法

​ 4、利用Consumer组件去接受共享的数据

​ {data =>接受组件的render内容}

import { createContext } from 'react'
const { Provider, Consumer } = createContext()// 通过Provider组件包裹,我们需要向child组件传递data
<Provider value="data"><div><Child /> </div>
</Provider>// child组件中使用 Consumer组件接收要共享的数据
<Consumer>{data => <span>{data}</span>}
</Consumer>

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

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

相关文章

【QT入门】 Qt实现自定义信号

往期回顾&#xff1a; 【QT入门】图片查看软件(优化)-CSDN博客 【QT入门】 lambda表达式(函数)详解-CSDN博客 【QT入门】 Qt槽函数五种常用写法介绍-CSDN博客 【QT入门】 Qt实现自定义信号 一、为什么需要自定义信号 比如说现在一个小需求&#xff0c;我们想要实现跨ui通信&a…

Day 6. 二叉数:满二叉树、完全二叉树

顺序表、链式表、栈、队列&#xff1a;线性——一对一的结构 树形结构&#xff08;一对多&#xff09; 叶子节点&#xff08;终端结点&#xff09;&#xff1a;只有前驱没有后继结点 度 深度&#xff08;树的度&#xff09;&#xff1a;树中各节点度的最大值 广度&#x…

优化选址问题 | 基于鹈鹕算法求解基站选址问题含Matlab源码

目录 问题代码问题 鹈鹕算法(Pelican Optimization Algorithm, POA)是一种相对较新的启发式优化算法,模拟了鹈鹕鸟觅食的行为。这种算法通常用于解决复杂的优化问题,如函数优化、路径规划、调度问题等。基站选址问题通常是一个复杂的优化问题,需要考虑覆盖范围、干扰、成…

Java中的this关键字的内存图

在Java中&#xff0c;this关键字用于引用当前对象。它可以在实例方法和构造方法中使用&#xff0c;表示对当前对象的引用。 要理解this关键字的内存图&#xff0c;我们需要了解Java中对象的内存分配方式。当创建一个对象时&#xff0c;Java会在堆内存中分配一块内存空间来存储…

阿里云ECS服务器u1通用算力型CPU性能如何?

阿里云服务器u1是通用算力型云服务器&#xff0c;CPU采用2.5 GHz主频的Intel(R) Xeon(R) Platinum处理器&#xff0c;通用算力型u1云服务器不适用于游戏和高频交易等需要极致性能的应用场景及对业务性能一致性有强诉求的应用场景(比如业务HA场景主备机需要性能一致)&#xff0c…

LAMP架构与搭建论坛

目录 1、LAMP架构简述 2、各组件作用 3、构建LAMP平台 3.1编译安装Apache httpd服务 3.1.1关闭防火墙&#xff0c;将安装Apache所需软件包传到/opt目录下 3.1.2安装环境依赖包 3.1.3配置 设置安装目录、安装模块 3.1.4编译安装 3.1.5优化配置文件路径 3.1.6启动apache…

【机器学习300问】45、什么是推荐系统?

我想大家对于推荐系统都能或多或少的讲出一些&#xff0c;因为现在的广告厂商真是想方设法的把他们的产品推送到我们面前来&#xff0c;让我们看到并产生购买的欲望&#xff01; 推荐系统就像是一位超级贴心的私人购物顾问或者智能娱乐向导 想象一下你走进一家巨大的网上商城或…

北航计算机软件技术基础课程作业笔记【1】

为白成刚老师的课程&#xff0c;简单做一个记录&#xff0c;内容偏基础&#xff0c;自己仅保留认为有用的部分 L1&#xff1a;算法概论 课程简单介绍了复杂度、算法的概念 1.作业 计算下列各片断程序中xx1的执行次数 (1) for (i1; i<n; i)for (j1; i<n; j)for (k1; …

牛客小白月赛89补题1(ABCD)(偏难)

评价&#xff1a; 高情商&#xff1a;收获很大 &#xff0c;让自己进一步认清自己。 低情商&#xff1a;题目难&#xff0c;自己太菜了。 今天还有一些其他事&#xff0c;剩下的题明天再补。 我们从a题开始吧&#xff1a; A.签到 我们只要看看其中的max与min是否不符合即可…

Android14之selinux报错:ERROR: end of file in comment(一百九十七)

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

项目成功秘诀:高效管理策略确保按时交付v2

一、项目成功的重要性 在当今竞争激烈的商业环境中&#xff0c;项目的成功对于企业的生存和发展具有至关重要的意义。项目的成功不仅意味着企业能够达成既定的业务目标&#xff0c;还能提升企业的市场地位、增强品牌影响力&#xff0c;并为企业的可持续发展奠定坚实基础。我们…

eMule 中的“低 ID”(Low id)

在 eMule 中&#xff0c;“低 ID”是指 eDonkey 网络内的客户端 ID 被归类为“低”的情况。 这种分类表明客户端的连接有一定的限制或限制。 在 eMule 中&#xff0c;ID 较低可能会影响用户连接到其他客户端的能力&#xff0c;并可能导致下载速度变慢或出现其他网络问题。 eMu…

中型企业网络路由器配置(ensp)实验

vlan、vlan间路由、ospf协议等来实现三层交换机和单臂路由之间的通信 拓扑图&#xff1a; 1. 配置三层交换机vlan和vlan间路由 SW1 #进入视图 sys sysn sw1 undo info-center enable#配置vlan vlan batch 10 20 30 40 50 60#配置access口 int g0/0/1 port link-type access …

vuetify3 弹窗中使用 element-plus 时间控件异常解决

1、解决方案: v-dialog 标签加上3个属性&#xff1a; 1、persistent &#xff1a;禁用点击窗口外的关闭事件 2、no-click-animation&#xff1a;禁用点击动画 3、retain-focus&#xff1a;取消焦点事件 2、填报弹窗基本代码&#xff1a; 就看 v-dialog 标签属性就行&#xf…

【Qt5】QVariant

2024年3月22日&#xff0c;周五下午 什么是QVariant QVariant 是 Qt 框架中用于处理各种数据类型的通用类。它可以存储几乎任何类型的数据&#xff0c;并且能够在不同的 Qt 类之间进行类型转换。QVariant 在 Qt 中被广泛用于处理不同的数据类型&#xff0c;包括基本数据类型&a…

Python Using cached demjson-2.2.4.tar.gz (131 kB)...报错

安装demjson报错&#xff0c;提示Using cached demjson-2.2.4.tar.gz (131 kB)...... 解决办法 使用pip list查看&#xff0c;发现是setuptools版本过高导致&#xff0c;这里我使用的是45.2版本 pip uninstall setuptools pip install setuptools45.2 pip install demjson …

ChatGPT提示词大全:解锁AI对话

2024升级ChatGPTPLUS最快的方法 一、什么是ChatGPT提示词&#xff1f; ChatGPT提示词是用户在与ChatGPT进行对话时&#xff0c;提供的一些关键词或短语&#xff0c;用于引导ChatGPT的回答方向和内容。通过合理的提示词设置&#xff0c;用户可以更加精确地获取所需信息&#x…

HBase的Bulk Load流程

目录 1. 数据准备 2. 文件移动 3. 加载数据 4. Region处理 5. 元数据更新 6. 完成加载 7. 清理 8. 异常处理 LoadIncrementalHFiles&#xff08;也称为Bulk Load&#xff09;是HBase中一种将大量数据高效导入到HBase表的机制。以下是LoadIncrementalHFiles的主要流程步…

视觉信息处理和FPGA实现第6次作业-Matlab实现灰度图像的亮度调节

一、代码 close all;clear all;clc; pic imread("cameraman.tif"); [M,N] size(pic); disp("Contrast Ajust Demo"); value input("Please input number of value, range: 0~2\n"); while value>2 || value<0disp("The number is in…