父组件和子组件的调用:类组件class和函数组件(hook)ref的相互绑定

父组件事件触发子组件中的事件

1:父组件是class,子组件是class

//父组件
import React, { Component } from 'react';
class Index extends Component {
  click = (e) => {
    this.childReset ?.onReset?.();
  }
  render() {
    return (
        <div>
            <Button onClick={this.click} />
            <Child ref={(node) => { this.childReset = node }} />
        </div>
    )
  }
}
//子组件
class Child extends Component {    
    onReset=()=>{
      alert('child')
    }
    render() {
        return (<div>child</div>)
    }
}


2:父组件是Component,子组件是hook

import React, { Component } from 'react';
class Index extends Component {
  click = () => {
    this.childReset && this.childReset ()
  }
  render() {
    return (
        <div>
            <Button onClick={this.click} />
          <Child ref={(node) => { this.childReset = node }} />
        </div>
    )
  }
}
//子组件
import React, {useImperativeHandle,forwardRef } from 'react';
const Child = ({ ... },ref)=> {
  useImperativeHandle(ref, () => onRest);
  const onRest=()=>{
    console.log('dddd');
  };
  return (<div onClick={onRest}>child</div>);
};
export default forwardRef(Child);

3:父组件是hook,子组件是Component

//父组件
import React, { useRef } from "react";
const Parent = ({
  ...
}) => {
  const childReset = useRef()
  const click=()=>{
    childReset ?.current?.onReset?.(); 
  }
  return (
       <div>
            <Button onClick={click} />
            <Child ref={childReset } />
        </div>
  )
}
//子组件
class Child extends Component {    
    onReset=()=>{
      alert('child')
    }
    render() {
        return (<div>child</div>)
    }
}


4:父组件是hook,子组件是hook

//父组件
import React, { useRef } from "react";
const Parent = ({
  ...
}) => {
  const childReset = useRef()
  const click=()=>{
    childReset ?.current?.(); 
  }
  return (
       <div>
            <Button onClick={click} />
            <Child ref={childReset } />
        </div>
  )
}
import React, {useImperativeHandle,forwardRef } from 'react';
const Child = ({ ... },ref)=> {
  useImperativeHandle(ref, () => onRest);
  const onRest=()=>{
    console.log('dddd');
  };
  return (<div >child</div>);
};
export default forwardRef(Child);

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容