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

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

javascript 复制代码
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;
相关推荐
weixin_5168756540 分钟前
vue3 父子组件传参
前端·javascript·vue.js
gqkmiss1 小时前
Chrome 130 版本新特性& Chrome 130 版本发行说明
前端·chrome·chromeos·chrome 130
龙哥说跨境1 小时前
浏览器内核版本更新:Chrome 130✔
前端·javascript·chrome
浏览器爱好者1 小时前
Chrome与夸克的安全性对比
前端·chrome
浏览器爱好者1 小时前
Chrome与夸克谁更节省系统资源
前端·chrome
Gauss松鼠会1 小时前
GaussDB Ustore存储引擎解读
java·前端·数据库·gaussdb
敏编程1 小时前
网页前端开发之HTML入门篇:表格标签 table
前端·html
&活在当下&1 小时前
js 将文件 url 地址转成 Blob 文件流并下载
前端·javascript·vue.js
shix .1 小时前
vue3中setup的作用是什么?
前端·javascript·vue.js
随笔写1 小时前
JavaScript 读取及写入本地文件
开发语言·javascript·ecmascript