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;…

python 逻辑语句简记

什么语言都少不了逻辑处理语句的使用&#xff0c;python的逻辑处理语句有自身的使用特点&#xff0c;稍稍总结记录一下 一、断言 assert 条件 条件触发&#xff0c;程序执行中断 二、条件语句 if 条件&#xff1a; 执行内容 三、循环语句 while 条件&#xff1a; 循环体…

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

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

.env文件详解(vite项目全局配置文件)

.env文件是一个用于存储环境变量的文件。在开发和部署应用程序时,经常需要在不同的环境中配置不同的变量,例如 API 地址、数据库连接信息、密钥等。在许多应用程序中,.env 文件通常包含一个或多个键值对,用于存储环境变量。 Vite 中的 .env 文件还可以用于配置构建时的变量…

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

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

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

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

rockylinux9.4单master节点k8s1.28集群部署

kubernetes集群部署 常见的 k8s 部署方式包括&#xff1a;二进制包、kubeadm 工具、云服务提供商、或通过一些开源的工具搭建&#xff0c;例如&#xff1a;sealos、kuboard、Runcher、kubeSphere。 本文使用kubeadm的部署方式&#xff0c;部署k8s1.28版本 我本地安装资源规划…

Linux 进程2

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

随笔 程序运行的基本原理

程序是如何运行&#xff0c;又是如何崩溃的&#xff1f; 正如标题所言&#xff0c;今天我们来聊聊程序是如何执行的&#xff1f;以及又是如何崩溃的&#xff1f;我们哼哧哼哧写的代码并不是程序&#xff0c;本质上不过是一个文本文件。即便我们将我们写的代码通过编译生成的可…

用Go语言构建健壮的并发系统:深入理解错误传播与处理

解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 在当今的软件开发中,构建并发和分布式系统已经成为常态。然而,在这些系统中,错误的发生频率高且定位困难。如果我们能够深入考虑错误如何在系统中传播,以及最终如何呈现给用户,那么我们就能为自己、团队和用…

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…

经典sql题(七)查找直播间最大在线人数

使用 SQL 分析房间用户状态变化 本文将详细介绍如何使用 SQL 的窗口函数和聚合函数&#xff0c;分析用户在房间中的状态变化&#xff0c;目标是计算每个房间指定时间段内的最大用户状态。 示例数据 假设我们的数据表包含以下字段&#xff1a; room_iduser_idlogin_timelogo…

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…

andriod studio 学习1

res —> layout: 放置布局文件 res —> drawable-xhdpi: 放置图标、图片文件 res —> values: 放置style、字符串、颜色等资源 LinearLayout: 线性布局 RelativeLayout&#xff1a;相对布局 布局相关设置:padding 、background TextView&#xff1a;展示文本 android…