当前位置: 首页 > news >正文

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>

相关文章:

React——组件通讯

组件通讯介绍 组件中的状态是私有的&#xff0c;组件的状态只能在组件内部使用&#xff0c;无法直接在组件外使用&#xff0c;但是我们在日常开发中&#xff0c;通常会把相似、功能完整的应用才分成组件&#xff08;工厂模式&#xff09;利于我们的开发&#xff0c;而不同组件直…...

php闭包应用

laravel 路由 bingTo 把路由URL映射到匿名回调函数上&#xff0c;框架会把匿名回调函数绑定到应用对象上&#xff0c;这样在匿名函数中就可以使用$this关键字引用重要的应用对象。Illuminate\Support\Traits\Macroable的__call方法。 自己写一个简单的demo: <?php <?…...

基于python+vue的OA公文发文管理系统flask-django-php-nodejs

系统根据现有的管理模块进行开发和扩展&#xff0c;采用面向对象的开发的思想和结构化的开发方法对OA公文发文管理的现状进行系统调查。采用结构化的分析设计&#xff0c;该方法要求结合一定的图表&#xff0c;在模块化的基础上进行系统的开发工作。在设计中采用“自下而上”的…...

脉冲变压器电感的工艺结构原理及选型参数总结

🏡《总目录》 目录 1,概述2,工作原理3,结构特点3.1,铁心结构3.2,铁心材料3.3,绕组4,工艺流程4.1,准备铁芯4.2,绕制线圈4.3,安装线圈4.4,固定线圈4.5,绝缘处理4.6,高压脉冲引出...

java中Arrays介绍及常用方法

在Java中&#xff0c;java.util.Arrays类是一个提供了各种操作数组的工具类。该类提供了一系列静态方法来对数组进行排序、搜索、填充、复制等操作。下面是对Arrays类的介绍以及常用方法的说明: toString()方法&#xff1a;将数组转换为字符串形式并返回&#xff0c;方便输出数…...

CTF题型 Http请求走私总结Burp靶场例题

CTF题型 Http请求走私总结&靶场例题 文章目录 CTF题型 Http请求走私总结&靶场例题HTTP请求走私HTTP请求走私漏洞原理分析为什么用前端服务器漏洞原理界定标准界定长度 重要!!!实验环境前提POST数据包结构必要结构快速判断Http请求走私类型时间延迟CL-TETE-CL 练习例题C…...

Nginx 的安装、启动和关闭

文章目录 一、背景说明二、Nginx 的安装2.1、依赖的安装2.2、Nginx 安装2.3、验证安装 三、启动 Nginx3.1、普通启动3.2、如何判断nginx已启动3.3、通过配置启动3.4、设置开机启动 四、关闭 Nginx4.1、优雅地关闭4.2、快速关闭4.3、只关闭主进程4.4、使用nginx关闭服务 五、重启…...

python 操作excel(openpyxl.load_workbook)、excel操作封装

操作excel 其他的库&#xff1a; xlrd xlwt &#xff1a; 过时了&#xff0c;只能操作xls后缀的文件。pandas&#xff1a;大数据测试 数据分析项目会用。 openpyxl&#xff1a;第三方库 支持的格式有&#xff1a;.xlsx、.xlsm、.xltx、.xltm&#xff0c;l不支持.xls文件格式…...

MySQL系统参数配置实战:生产环境优化

引言&#xff1a; MySQL作为广泛应用的关系型数据库&#xff0c;其系统参数配置直接影响着数据库的性能、稳定性以及资源利用率。本文旨在深入探讨MySQL的核心系统参数&#xff0c;并提供一份面向生产环境的配置建议&#xff0c;以帮助运维人员更好地优化数据库性能&#xff0…...

判断列表中每一个元素的个数

1.使用循环 nums [1, 1, 1, 2, 2, 3]# 构建一个空字典来存储元素和它们出现的次数 count_dict {}# 遍历列表&#xff0c;更新字典中每个元素出现的次数 for num in nums:if num in count_dict:count_dict[num] 1else:count_dict[num] 1# 输出统计结果 for num, count in c…...

目标检测——PP-YOLOE算法解读

PP-YOLO系列&#xff0c;均是基于百度自研PaddlePaddle深度学习框架发布的算法&#xff0c;2020年基于YOLOv3改进发布PP-YOLO&#xff0c;2021年发布PP-YOLOv2和移动端检测算法PP-PicoDet&#xff0c;2022年发布PP-YOLOE和PP-YOLOE-R。由于均是一个系列&#xff0c;所以放一起解…...

每日一题 --- 螺旋矩阵 II[力扣][Go]

螺旋矩阵 II 题目&#xff1a;59. 螺旋矩阵 II - 力扣&#xff08;LeetCode&#xff09; 给你一个正整数 n &#xff0c;生成一个包含 1 到 n2 所有元素&#xff0c;且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1&#xff1a; 输入&#xff1a;n 3 输出…...

C语言自定义类型结构体

variable adj.易变的&#xff0c;多变的&#xff1b;时好时坏的&#xff1b;可变的&#xff0c;可调节的&#xff1b; &#xff08;数&#xff09;&#xff08;数字&#xff09;变量的&#xff1b;&#xff08;植&#xff0c;动&#xff09;变异的&#xff0c;变型的&#xff1…...

【SpringBoot框架篇】37.使用gRPC实现远程服务调用

文章目录 RPC简介gPRC简介protobuf1.文件编写规范2.字段类型3.定义服务(Services) 在Spring Boot中使用grpc1.父工程pom配置2.grpc-api模块2.1.pom配置2.2.proto文件编写2.3.把proto文件编译成class文件 3.grpc-server模块3.1.pom文件和application.yaml3.2.实现grpc-api模块的…...

投资的三个匹配

许多人亏钱都是犯了同样错误&#xff0c;要么对投资的预期过高&#xff0c;要么是投资期限不匹配&#xff0c;要么是波动承受能力不匹配。投资想要赚钱&#xff0c;先解决匹配问题。 1.预期收益率要匹配 就是明确自己做投资&#xff0c;每年想赚多少钱。凡事都要有个目标&…...

[Netty实践] 请求响应同步实现

目录 一、介绍 二、依赖引入 三、公共部分实现 四、server端实现 五、client端实现 六、测试 一、介绍 本片文章将实现请求响应同步&#xff0c;什么是请求响应同步呢&#xff1f;就是当我们发起一个请求时&#xff0c;希望能够在一定时间内同步&#xff08;线程阻塞&am…...

Java进阶—哈希冲突的解决

1. 什么是哈希冲突 哈希函数&#xff1a;哈希函数是一种将输入数据(键)映射到固定大小范围的输出值(哈希值)的函数。哈希函数通常用于存储 数据存储和检索领域&#xff0c;例如哈希表中。 哈希表&#xff1a;哈希表(Hash Table)&#xff0c;也成为哈希映射(Hash Map)或字典&…...

css的border详解

CSS的border属性是一个简写属性&#xff0c;用于设置以下四个边框属性&#xff1a; border-width&#xff1a;定义边框的宽度。可以使用具体的像素值&#xff0c;或者使用预定义的关键字如thin、medium和thick。border-width不支持百分比值。默认情况下&#xff0c;边框的宽度是…...

如何保障消息一定能发送到RabbitMQ?

我们知道&#xff0c;RabbitMQ的消息最终是存储在Queue上的&#xff0c;而在Queue之前还要经过Exchange&#xff0c;那么这个过程中就有两个地方可能导致消息丢失。第一个是Producer到Exchange的过程&#xff0c;第二个是Exchange到Queue的过程。 为了解决这个问题&#xff0c…...

【web前端】CSS语法

CSS语法 1. CSS语法格式 通常情况下语法格式如下: 选择器{属性名:属性值;属性名:属性值;属性名:属性值;... }2. CSS添加方式 2.1 行内样式 直接将样式写在本行的标签内。 <h1><p style"font-size: 48px; color:red;";>行内样式测试</p></…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序

一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档&#xff09;&#xff0c;如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下&#xff0c;风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...

Go 并发编程基础:通道(Channel)的使用

在 Go 中&#xff0c;Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式&#xff0c;用于在多个 Goroutine 之间传递数据&#xff0c;从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...

从物理机到云原生:全面解析计算虚拟化技术的演进与应用

前言&#xff1a;我的虚拟化技术探索之旅 我最早接触"虚拟机"的概念是从Java开始的——JVM&#xff08;Java Virtual Machine&#xff09;让"一次编写&#xff0c;到处运行"成为可能。这个软件层面的虚拟化让我着迷&#xff0c;但直到后来接触VMware和Doc…...

node.js的初步学习

那什么是node.js呢&#xff1f; 和JavaScript又是什么关系呢&#xff1f; node.js 提供了 JavaScript的运行环境。当JavaScript作为后端开发语言来说&#xff0c; 需要在node.js的环境上进行当JavaScript作为前端开发语言来说&#xff0c;需要在浏览器的环境上进行 Node.js 可…...