react 父子组件通信(class组件、hooks组件)

react hooks 父子组件传值通讯 /子组件import {//子组件调用父组件的方法 forwardRef,useImperativeHandle const chindCom = forwardRef(({console . log('我是子组件事件1' , value) } const onChange =(value) => {console . log('我是子组件事件2' , value) } const handelClick =(count) => { 阅读详情

React-组件间通信onRef方法

当在子组件中调用onRef函数时,正在调用从父组件传递的函数。this.props.onRef(this)这里的参数指向子组件本身,父组件接收该引用作为第一个参数:onRef = {ref =>(this.child = ref)} 然后它使用this.child保存引用。之后,可以在父组件内访问整个子组件实例,并且可以调用子组件函数。

组件间通信除了props外还有onRef方法,不过React官方文档建议不要过度依赖ref。

react 文档说明

1、父子组件都为Class组件
// 父组件
import React, {Component} from 'react';
import Child form "./Child"
export default class Parent extends Component {
	onRef = (ref) => {
        this.child = ref
    }
    click = (e) => {
        this.child.getData()
    }
    render() {
        return(
            <div>
                <Child onRef={this.onRef} />
                <button onClick={this.click} >调用子组件</button>
            </div>
        )
    }
}

// 子组件
class default Child extends Component {    
   componentDidMount(){
       //必须在这里声明,所以 ref 回调可以引用它    
       this.props.onRef(this)
    }
    getData = () => {
		// TODO
	)
    render() {
        return (
	        <div>
	        // TODO
			</div>
		)
    }
}
2、父组件为Class组件,子组件为Hooks 组件
// 父组件
import React from "react";
export default class Parent extends React.Component {
  constructor(props) {
    super(props)
  }

  handleChildMethod = () => {
    this.refChild.onChild()
  }
  // 获取绑定子组件
  onRef (ref) {
    this.refChild = ref
  }
  render() {
    return (
      <div>
        <Child
          onRef={(ref) => this.onRef(ref)}
        ></Child>
        <Button onClick={this.handleChildMethod}>调用子组件</Button>
      </div>
    )
  }
}

// Hooks 子组件
import React, {useImperativeHandle} from "react";
const Child = (props) => {
  const [form] = Form.useForm();
  const {} = props
  //正常情况下 ref 是不能挂在到函数组件上的,因为函数组件没有实例,
  // 但是 useImperativeHandle 为我们提供了一个类似实例的东西。
  // 它帮助我们通过 useImperativeHandle 的第 2 个参数,所返回的对象的内容挂载到 父组件的 ref.current 上。
  useImperativeHandle(props.onRef, () => ({
    // onChild 就是暴露给父组件的方法
    onChild: () => {
      return form.getFieldsValue()
    }
  }))
  const onReset = () => {
    form.resetFields();
  };
  const onFinish = (values) => {
    console.log('Success:', values);
  };
  const onFinishFailed = (errorInfo) => {
    console.log('Failed:', errorInfo);
  };

  return(
    <div>
      <Form
        name={'formName'}
        layout="inline"
        autoComplete="off"
        form={form}
        initialValues={{}}
        onFinish={onFinish}
        onFinishFailed={onFinishFailed}
      >
          <Form.Item label="姓名" name="name">
            <Input allowClear placeholder="请输入"/>
          </Form.Item>
          <Form.Item>
            <Button type="default" onClick={onReset} >清空</Button>
          </Form.Item>
      </Form>
    </div>
  )
}
3、父子组件都为Hooks
// 父组件
import {useRef} from 'react';
import ChildRef from './ChildRef'
const Parent = () => {
    const child = useRef();
    const updateChildState = () => {
	   // 组件暴露给父组件的方法
	   console.log(child.current.getVal());
	   child.current.changeVal(100)
	}
    return (
        <>
            <ChildRef ref={child} />
            <button onClick={updateChildState}>触发子组件方法</button>
        </>
    )
}

import React, { useImperativeHandle, forwardRef } from "react"
const Child = (props, ref) => {
  const [count, setCount] = useState(0);
  useImperativeHandle(ref, () => ({ // 暴露给父组件的方法
    getVal,
    changeVal
  }))

  const changeVal = (val) => {
    setCount(val)
  }
  const getVal = () => {
    return count
  }
  return (
    <div>我是子组件{count}</div>
  )
}
// forwardRef实际上就是当父组件需要得到子组件元素时,可以利用forwardRef来实现
const ChildRef = forwardRef(Child)

4、父组件为Hooks ,子组件为Class

// 父组件
const Parent = () => {
  let refChild = {};
  const handleChildMethod = () => {
    // 调用子组件方法
    refChild.setValue(1000);
  }
  return(
    <div>
      <h2>我是父组件</h2>
      <Button onClick={handleChildMethod}>调用子组件</Button>

      <Child onRef={ref => refChild = ref} ></Child>
    </div>
  )
}


// 子组件
export default class Child extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      value: 0
    }
  }
  componentDidMount() {
    this.props.onRef && this.props.onRef(this);
  }
  setValue = (value) => {
    this.setState({
      value
    })
  }
  render() {
    const {value} = this.state
    return (
      <div>
        <h2>我是子组件 {value}</h2>
      </div>
    )
  }
}
React Hooks面试题 React Hooks面试题整理 React 加入 Hooks 的意义是什么?为什么 React 要加入Hooks 这一特性? if else条件判断里使用hooks有什么问题 hooks闭包的坑有哪些?如何解决 常用的Hooks有哪些? useEffect为什么有时候会出现无限重复请求的问题 useEffect的依赖项里类数组根据什么来判断有没有值变化 React Hooks api的原理: React Hooks如何模拟组件生命周期? 模拟的生命周期和class中的生命周期有什么区 阅读详情

相关推荐

如何在React组件中实现父子组件之间的通信?

在React中,父子组件之间的通信通常通过props(属性)和回调函数来实现。

极客前端探索者的博客 772

onRef在react中的使用

组件间通信除了props外还有onRef方法,不过React官方文档建议不要过度依赖ref。本文使用onRef语境为在表单录入时提取公共组件,在提交时分别获取表单信息。 下面demo中点击父组件按钮可以获取子组件全部信息,包括状态和方法,可以看下demo中控制台打印。 // 父组件 class Parent extends React.Component { testRef=(ref)=&gt...

weixin_44471622的博客 5215

RAG在医药行业为什么80%都翻车了?

这篇文章不是要劝你别做RAG,而是把坑说清楚。医药行业有它的特殊性——监管压力、专业术语密度、多语言混排、文档结构复杂——这些因素叠加在一起,让标准RAG教程里的那套方法论几乎直接失效

qq_31808385的博客 635

React-组件间通信之onRef方法(refs转发)

React-组件间通信之onRef方法 组件间通信除了props外还有onRef方法,不过React官方文档建议不要过度依赖ref。本文使用onRef语境为在表单录入时提取公共组件,在提交时分别获取表单信息。 下面demo中点击父组件按钮可以获取子组件全部信息,包括状态和方法,可以看下demo中控制台打印。 // 父组件 class Parent extends React.Comp...

从事前端,不断积累经验,学习新的技术。头像不是本人是莉莉崽(美貌、可爱集于一身的小姐姐,小仙女),一个宝藏博主,值得喜欢! 6224

用《Flappy Bird》游戏带你搞懂强化学习:从Q-learning到DQN的保姆级实战

本文通过《Flappy Bird》游戏实战,详细讲解了从Q-learning到DQN的强化学习技术。从环境搭建、Q表格构建到深度Q网络(DQN)的实现,逐步展示如何训练AI自主玩游戏。文章包含代码示例、训练技巧和性能优化方法,帮助读者深入理解强化学习的核心概念和应用。

weixin_42526415的博客 347

地平线天工开物AI开发平台实战:从量化训练到模型部署的完整指南

本文提供了地平线天工开物(OpenExplorer)AI开发平台的实战指南,详细解析了从量化训练到模型部署的完整流程。文章重点对比了量化感知训练(QAT)与训练后量化(PTQ)两条核心路径的优劣与适用场景,并分享了图像分类模型PTQ部署的实战经验与常见问题调试技巧,旨在帮助开发者高效地将AI模型部署到地平线AI芯片上。

weixin_29046035的博客 456

react hook 中 父组件调用子组件中的方法

一,在父组件中声明一个ref const changeRef = useRef<any>() 二,将ref作为参数传递给子组件 <Compile id={topicId} onRef ={changeRef}></Compile> 三,子组件接受ref 暴露出方法给父组件 // 暴露给父组件的方法 useImperativeHandle(props.onRef,()=>({ changeVal:() => {

weixin_45671998的博客 453

如何在Jetson Nano上快速搭建Pytorch环境(含torchvision安装教程)

本文详细介绍了在Jetson Nano上快速搭建PyTorch环境的完整步骤,包括系统准备、PyTorch安装优化、torchvision编译安装及环境测试。通过本指南,开发者可以高效部署深度学习开发环境,充分利用Jetson Nano的GPU加速能力进行计算机视觉项目开发。

weixin_42628941的博客 340

vue-cli 3.10.0 父组件给子组件传值

App.vue (父组件) <template> <!-- (:v)子组件将要接受的变量名 (value)data中的value --> <sub-component-a :v="value"></sub-component-a> </template> <script> // 引用子组件 import Sub...

JJ44409915的专栏 664

dolphinscheduler-3.4.0

dolphinscheduler集群部署

docsz的博客 659

垂直领域论坛数据挖掘:Python突破Discuz!加密与用户画像构建指南

在垂直领域论坛,如专业技术论坛、兴趣爱好社区等,积累了大量有价值的信息和用户数据。这些数据不仅可以帮助我们了解用户的行为模式和兴趣点,还能为社区运营、产品优化、商业决策等提供有力支持。然而,许多基于Discuz!系统的论坛对数据进行了加密保护,给数据挖掘带来了一定的挑战。本文将详细探讨如何使用Python突破Discuz!论坛的加密机制,并构建用户画像,实现数据掘金。

u014481728的博客 1693

react 创建界面的2种常见方式以及react hooks

1、无状态state,function组件 import React, { Component } from 'react' import ChildTest from './test' function Test(props) { return ( <div className="safe-wrap"> <ChildTest camera="测试"...

smaller_coder的博客 490

华为 MetaERP 总账模块依托 “交易即核算” 的事件驱动架构,与 Oracle EBS 相比,更强调业务事件自动触发财务动作、实时数据同步和智能规则引擎,实现业务与财务的深度融合

华为MetaERP总账模块采用"交易即核算"架构,相比Oracle EBS实现了三大突破:1)业务事件自动触发财务动作,如采购收货自动生成暂估凭证;2)业务财务数据实时同步,支持即时分析;3)内置智能规则引擎,实现自动匹配、核销和结转。该模块覆盖采购、销售、资产、薪酬等全业务场景,支持多维核算和关联交易自动抵消,显著提升核算效率与准确性。其中采购暂估、销售结转等场景实现全自动化处理,较EBS减少80%手工操作。

金牌架构师 222

react框架相关的面试题0111

react框架相关的面试题。

pretty_c_a_t的博客 149

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Ract父组件调用子组件方法

useRef,useImperativeHandle,forwardRe会用到这3个hooks。

weixin_41544124的博客 313

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

前端-react(class组件和Hooks)

函数页面没有生命周期,所以需要利用一些方法useEffect有两个参数:不传第二个参数 功能=componentDidMount和componentDidUpdate第二个参数传空数组 功能=componentDidMount第二个参数数组里放某个数据=watch监听vue的watch默认是不会开始就执行的,react的useEffect监听某个数据,开始就会执行一次(didamount)

m0_74825074的博客 1225

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

React优化性能的hooks,Class类组件,zustand--Redux平替

useReducer、useMemo、useCallback、forwardRef、ClassAPI,类组件的基础结构、生命周期、组件之间的通信、zustand的使用方法、异步支持以及切片模式

samroom的博客 1339

reactstrap函数式组件:Hooks完全替代class组件

你还在为class组件的繁琐生命周期管理而烦恼吗?还在为this绑定问题调试到深夜吗?本文将带你全面了解reactstrap如何通过React Hooks实现函数式组件,彻底告别class组件的复杂性。读完本文你将掌握:Hooks在reactstrap组件中的实战应用、class组件迁移指南、性能优化技巧以及完整的代码示例。 ## 为什么选择函数式组件? reactstrap作为Bootstr...

gitblog_00703的博客 739

一一二、react Hooks 父组件调用子组件方法

子组件 // ./hook/Login import React, { useState, useImperativeHandle } from 'react'; export function Login({ childRef }) { const [ name, setName ] = useState('') const [ email, setEmail ] = useState('') useImperativeHandle(childRef, () => ({ ge

梅某某 6198

react-hooks 在不编写 class 的情况下使用 state 以及其他的 React 特性

Hook 是 React 16.8 的新增特性。它可以让你在不编写 class 的情况下使用 state 以及其他的 React 特性

qq_37440870的博客 1132

React Hooks之UseRef ForwardRef useImperativeHandle父子组件通信

React Hooks之UseRef ForwardRef useImperativeHandle父子组件通信

BUG_CONQUEROR_LI的博客 1476

hooks

Hook 是 React 16.8 的新增特性。它可以让你在不编写 class 的情况下使用 state 以及其他的 React 特性。 前言:hooks出了已有大半年了,关注的公众号也大都推了关于hooks的文章,可是因为工作中一直用的是class,所以一直没有用,也没有学,趁着这段时间项目不那么干,将hooks系统性的学习一下,并做笔记记录一下。 目录 useState userEffe...

9079

React教程全家桶实战redux+antd+React Hooks前端js视频-1.6G课程

React教程全家桶实战redux+antd+React Hooks前端js视频-1.6G课程

软希网分享源码的博客 1943
上一篇: vue中连接使用mqtt
下一篇: antd react 动态表单验证和赋
脑瓜不疼
博客等级 码龄9年 84粉丝 124原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值