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

react中ref使用支持父调用子组件的方法

父组件不管是类还是函数组件都支持creatRef(),函数组件可以用useRef();
子组件中,函数组件由于没有实例,只能使用forwardRef搭配useImperativeHandle使用

import React, { createRef,forwardRef} from 'react'
import styles from './index.module.scss'
import { useImperativeHandle } from 'react';
import { useRef } from 'react';

class Test extends React.PureComponent {
  test() {
    console.log("Test111");
  }
  render() {
    return <h2>Test</h2>;
  }
}
// 创建一个函数组件, 作为子组件测试
// 使用forwardRef将函数包裹起来
const Foo = forwardRef(function(props, ref) {
  const testfoo = () => {
    console.log('testfoo');
  }
  useImperativeHandle(ref, () => {
    return {
      testfoo
    }
  },[])
  return (
    <h2 ref={ref}>Foo</h2>
  )
})

// export default class About extends React.Component{
//   constructor(){
//     super()
//     this.testRef = createRef();
//     this.fooRef = createRef();
//   }
//   getDom() {
//     this.testRef.current.test();
//     console.log(this.fooRef.current,'current');
//     this.fooRef.current.testfoo();
//   }
//   render() {
//     return (
//       <div>
//         <Test ref={this.testRef}/>
//         <Foo  ref={this.fooRef}/>
//         <button onClick={() => this.getDom()}>获取DOM</button>
//       </div>
//     )
//   }
// }


const About = () => {
  // const testRef = useRef();
  // const fooRef = useRef();
  const testRef = createRef();
  const fooRef = createRef();
  const getDom = () => {
    testRef.current.test();
    fooRef.current.testfoo();
  }
  return (
    <div>
      <Test ref={testRef}/>
      <Foo  ref={fooRef}/>
      <button onClick={getDom}>获取DOM</button>
    </div>
  )
}
export default About;

http://www.kler.cn/a/382180.html

相关文章:

  • 在 Ubuntu 下使用 Tauri 打包 EXE 应用
  • 32. 线程、进程与协程
  • 蓝桥杯物联网开发板硬件组成
  • 百度热力图数据处理,可直接用于论文
  • Android Studio新建项目在源码中编译
  • Kubeadm+Containerd部署k8s(v1.28.2)集群(非高可用版)
  • 基于springboot的音乐网站的设计与实现(源码+lw+调试)
  • 「C/C++」C++标准库 之 #include<iostream> 标准输入输出
  • 酒店管理系统|基于java和小程序的酒店管理小程序系统设计与实现(源码+数据库+文档)
  • 带轴承电枢的一般设计规则
  • MySQL表设计(三大范式 表的设计)
  • 助力你了解人工智能应用场景,分析市场,提高自身竞争力
  • 链表:LRU缓存
  • 算子级血缘助企业数据管理“自动化、精细化、智能化”
  • 自动化研磨领域的革新者:半自动与自动自磨机的技术突破
  • 八大排序总结
  • Spark on YARN:Spark集群模式之Yarn模式的原理、搭建与实践
  • git创建分支
  • AT6558F高性能BDS/GNSS多模卫星导航接收机SOC单芯片
  • 鸿蒙进阶-AlphabetIndexer组件
  • 掌握 Jest 配置文件:优化单元测试的灵活性与可维护性
  • WebSocket消息帧的组成结构
  • hpp文件的使用
  • Node.js + MongoDB + Vue 3 全栈应用项目开发
  • 多头注意力中的 `fc_out` 层:为什么要加它?带你彻底搞懂多头注意力机制
  • 神经网络s