react父子组件数据传递及相关操作

组件创建

坑1:组件名字的首字母记得大写

方式一:类组件(老版本的方式)
@Form.create()  //很关键,不加的话父子嵌套时会报找不到某些组件的错
class Child extends React.Component {
componentDidMount(){this.props.onRef && this.props.onRef(this);}func(){console.log("执行我,我被执行了")}render(){const { getFieldDecorator } = this.props.form;return(<div></div>);}
}
方式二,函数组件(渠道云版本为16.6,无状态,最新版本18有状态,react hooks ,18版本主使用这种方式)function MyButton(test) {return (<div ><Button type="danger" onClick={()=>{console.log(test)}}  style={{ marginRight: 8,position: "absolute", top: "58.5%",left: "67.5%"}} >新增</Button></div>);}调用时可直接嵌套

子组件使用父组件的状态的方法,一般有两种常用的:使用props通信和使用context通信

(子调父)使用props通信

直接上代码:

scala复制代码import React, { Component } from 'react';class App extends Component {state = { color: 'red' }changeColor = color => {this.setState({ color: color })}render() {return (<div style={{ border: `8px solid ${this.state.color}`, padding: "5px", margin: '5px' }}><h1>Wrapper</h1><Header color={this.state.color}></Header><Main changeColor={this.changeColor.bind(this)} color={this.state.color}></Main></div>)}
}class Header extends Component {render() {return (<div style={{ border: `8px solid ${this.props.color}`, padding: "5px", margin: '5px' }}><h1>Header</h1><Title color={this.props.color}></Title></div>)}
}class Title extends Component {render() {return (<div style={{ border: `8px solid ${this.props.color}`, padding: "5px", margin: '5px' }}><h1>Title</h1></div>)}
}class Main extends Component {render() {return (<div style={{ border: `8px solid ${this.props.color}`, padding: "5px", margin: '5px' }}><h1>Main</h1><Content changeColor={this.props.changeColor} color={this.props.color}></Content></div>)}
}class Content extends Component {render() {return (<div style={{ border: `8px solid ${this.props.color}`, padding: "5px", margin: '5px' }}><h1>Content</h1><button onClick={()=>this.props.changeColor("blue")}>变蓝</button><button onClick={()=>this.props.changeColor("green")}>变绿</button></div>)}
}export default App;

(父调子)使用props自定义onRef属性

  • 优点:
    1、写法简单易懂
    2、假如子组件是嵌套了HOC,也可以指向真实子组件
  • 缺点:
    1、需要自定义props属性
import React , { Component } from "react"
import { withRouter } from "react-router-dom"// 使用装饰器给裹上一层高阶函数(装饰器需要安装对应的babel包,此处作为演示使用)
@Form.create()  //很关键,不加的话父子嵌套时会报找不到某些组件的错
class Child extends Component {componentDidMount(){this.props.onRef && this.props.onRef(this);}func(){console.log("执行我")}render(){return (<div>子组件</div>);}
}class Parent extends Component {handleOnClick(){this.Child.func();}render(){return (<div><button onClick={this.handleOnClick}>click</button><Child onRef={ node => this.Child = node }></Child>	</div>);}
}

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

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

相关文章

茶思屋直播|TinyEngine+AI:聚焦主航道,在实践中探索低代码技术黑土地

低代码引擎使能开发者定制低代码平台。它是低代码平台的底座&#xff0c;提供可视化搭建页面等基础能力&#xff0c;既可以通过线上搭配组合&#xff0c;也可以通过cli创建个人工程进行二次开发&#xff0c;实时定制出自己的低代码平台。适用于多场景的低代码平台开发&#xff…

GIS开发常用的开源地图数据框架有哪些?

学完Web前端开发&#xff0c;还需要掌握哪些内容&#xff1f;本篇文章再给大家主要讲讲针对WebGIS开发的地图和可视化数据库。 Echarts ECharts是一个使用 JavaScript 实现的开源可视化库。它可以流畅的运行在 PC 和移动设备上&#xff0c;兼容当前绝大部分浏览器&#xff08;…

LTE SSS产生过程中z序列的介绍和MATLAB以及C语言实现

参考3GPP 36.211 6.11章节 接上期介绍完LTE SSS产生过程中加扰序列c的产生和代码实现&#xff0c;本期介绍一下LTE SSS产生过程中加扰序列z的原理和MATLAB以及C语言的实现。 SSS产生过程中用到的加扰Z1序列有两个&#xff0c;一个是 另一个是 两个序列是由一个m序列z移位而来…

“一屏显江山”,激光显示重构「屏中世界」

【潮汐商业评论/原创】 2024年国庆期间&#xff0c;曾感动过无数国人的舞蹈诗剧《只此青绿》改编的同名电影即将上映&#xff0c;而这一次观众们不必走进电影院&#xff0c;在家里打开官方合作的海信激光电视也能享受到同等的视听效果&#xff0c;这是激光电视在观影场景领域的…

【C++ 基础数学 】2121. 2615相同元素的间隔之和|1760

本文涉及的基础知识点 基础数学 LeetCode2121. 相同元素的间隔之和 难度分&#xff1a;1760 令2165&#xff0c;和此题几乎相等。 给你一个下标从 0 开始、由 n 个整数组成的数组 arr 。 arr 中两个元素的 间隔 定义为它们下标之间的 绝对差 。更正式地&#xff0c;arr[i] 和…

Linux 进程2

环境变量 再Linux操作系统中一切皆文件&#xff0c;这个环境变量自然也是一个文件&#xff0c;它的作用是辅助我们使用操作系统还可以辨识我们是什么用户(一般用户&#xff0c;root用户)。 env是读取完整环境变量的指令&#xff0c;里面记录了许多我登录操作系统所用的用户的信…

apache paimon简介(官翻)

介绍 如下架构所示: 读/写操作: Paimon 支持多样化的数据读写方式,并支持 OLAP 查询。 读取: 支持从历史快照(批处理模式)中消费数据,从最新偏移量(流处理模式)中读取数据,或以混合方式读取增量快照。写入: 支持从数据库变更日志(CDC)进行流式同步,从离线数据中…

构建高效企业客户管理系统:SpringBoot应用

1 绪论 1.1研究背景 随着网络不断的普及发展&#xff0c;企业客户管理系统依靠网络技术的支持得到了快速的发展&#xff0c;首先要从员工的实际需求出发&#xff0c;通过了解员工的需求开发出具有针对性的首页、个人中心、员工管理、客户信息管理、行业类型管理、项目信息管理、…

LabVIEW界面输入值设为默认值

在LabVIEW中&#xff0c;将前面板上所有控件的当前输入值设为默认值&#xff0c;可以通过以下步骤实现&#xff1a; 使用控件属性节点&#xff1a;你可以创建一个属性节点来获取所有控件的引用。 右键点击控件&#xff0c;选择“创建” > “属性节点”。 设置属性节点为“D…

HDMI20协议解析_Audio_Clock_Regeneration

HDMI20协议解析_Audio_Clock_Regeneration 1.版本说明 日期作者版本说明20240918风释雪初始版本 2.概述 当通过HDMI传输音频信号时&#xff0c;Audio Clock Regeneration&#xff08;ACR&#xff09;是必须要传输的数据包之一&#xff1b; HDMI传输过程中&#xff0c;音频采样…

CentOS7搭建Hadoop3集群教程

一、集群环境说明 1、用VMware安装3台Centos7虚拟机 2、虚拟机配置&#xff1a;2C&#xff0c;2G内存&#xff0c;50G存储 3、集群架构设计 从表格中&#xff0c;可以看出&#xff0c;Hadoop集群&#xff0c;主要有2个模块服务&#xff0c;一个是HDFS服务&#xff0c;一个是YAR…

8.进销存系统(基于springboot的进销存系统)

目录 1.系统的受众说明 2.开发技术与环境配置 2.1 SpringBoot框架 2.2 Java语言简介 2.3 MySQL环境配置 2.4 idea介绍 2.5 mysql数据库介绍 2.6 B/S架构 3.系统分析与设计 3.1 可行性分析 3.1.1 技术可行性 3.1.2 操作可行性 3.1.3经济可行性 3.4.1 数据库…

第159天:安全开发-Python-协议库爆破FTPSSHRedisSMTPMYSQL等

目录 案例一: Python-文件传输爆破-ftplib 库操作 ftp 协议 ​案例二&#xff1a; Python-数据库爆破-redis 库操作redis 协议 案例三&#xff1a;Python-邮件爆破-smtplib 库操作 smtp 协议 案例四&#xff1a;Python-登录爆破-paramiko库操作ssh协议 案例五&#xff1a…

Web 服务器介绍 | 通过 Tomcat 说明其作用

1. 什么是 Web 服务器&#xff1f; Web服务器是一种用于存储、处理和提供网页或Web应用程序的服务器。它通过HTTP&#xff08;超文本传输协议&#xff09;与客户端&#xff08;通常是浏览器&#xff09;进行通信&#xff0c;接收客户端的请求&#xff08;如网页请求&#xff0…

【RPA私教课:UIPath】RPA 赋能科技企业,登录时验证码自动截取

在某科技型企业里&#xff0c;专门设置了一个验证码接收系统。每当用户进行登录操作时&#xff0c;都必须从这个系统中抓取最新的登录验证码&#xff0c;以确保登录的安全性。 具体需求如下&#xff1a; 客户会预先在表格中妥善保存众多的账户和密码。当 RPA 机器人在业务系统…

Vue使用axios实现Ajax请求

1、什么是 axios 在实际开发过程中&#xff0c;浏览器通常需要和服务器端进行数据交互。而 Vue.js 并未提供与服务器端通信的接口。从 Vue.js 2.0 版本之后&#xff0c;官方推荐使用 axios 来实现 Ajax 请求。axios 是一个基于 promise 的 HTTP 客户端。 关于 promise 的详细介…

从零开始讲DDR(3)——DDRC与DDRPYH

一、DDR的使用 在之前的文章中我们介绍了DDR的基本概念&#xff0c;但是DDR内存的操作不仅仅是简单的数据读取和写入&#xff0c;它包括许多时序要求和信号调度。为了让DDR内存有效运作&#xff0c;系统需要在逻辑层和物理层之间进行大量的协作。我们拿出一张DDR的操作简化状态…

rfid超高频手持移动终端的性能特点

超高频手持移动终端的工作频率范围通常在860 MHz至960 MHz之间&#xff0c;具体频段根据不同的地区和国家有所不同&#xff0c;下面我们就一起来了解一下&#xff0c;超高频手持移动终端的性能特点。 超高频手持移动终端的性能特点 高效率与高速度&#xff1a;超高频手持移动…

付费计量应用过程(Payment Metering Application process)

The Payment Metering Application process is the combination of the business and support processes as the resultant interactions between the business and support functions, which thus describes the dynamic behavior of the system as a whole. 付费计量…

C++ std::any升级为SafeAny

std::any测试 #include <any>class A { public:int8_t a; };int main(int argc, char* argv[]) {std::any num((int8_t)42);auto a std::any_cast<A>(num);return 0; }异常&#xff1a; 0x00007FFA9385CD29 处(位于 test.exe 中)有未经处理的异常: Microsoft C 异…