美文网首页
子组件把ref暴露给父组件,父组件调用子组件的方法和变量

子组件把ref暴露给父组件,父组件调用子组件的方法和变量

作者: 懒懒猫 | 来源:发表于2022-03-30 20:07 被阅读0次

    子组件把ref暴露给父组件,父组件调用子组件的方法和变量

    父组件

    // class组件
    import React, {Component} from 'react';
    import Children from "../components/children";
    
    export default class Test extends Component {
      constructor(props) {
        super(props);
        this.buttonRef = React.createRef();
      }
      render() {
        return (
          <div>
            我是父组件
            <p onClick={() => console.log(this.buttonRef)}>我要获取子组件button的ref</p>
            <Children ref={this.buttonRef}>我是子组件啊!!!</Children>
          </div>
        )
      }
    }
    
    
    // hook组件
    import React, { useRef } from 'react';
    import Children from "../components/children";
    
    export default function Test(props) {
      const buttonRef = useRef();
     useEffect(async () => {
    打印即可调用子组件的方法和变量
       console.log(buttonRef.current )
      }, []);
      return (
        <div>
          我是父组件
          <p onClick={() => console.log(buttonRef)}>我要获取子组件button的ref</p>
          <Children ref={buttonRef}>我是子组件啊!!!</Children>
        </div>
      );
    }
    
    

    子组件

    import React, {useRef, useImperativeHandle} from 'react';
    const Children = React.forwardRef((props, ref) => {
    
    const refModal = useRef();
    
    const showModal = () => {
       console.log('我是子组件的方法')
      };
    useImperativeHandle(ref, () => ({
        // changeVal 就是暴露给父组件的方法
        showModal: showModal,
    
      }));
    
      
      return (
        <button ref={refModal }>
          child
        </button>
      )
    });
    
    export default Children;
    
    

    如果一直出不来,就要考虑看看是不是子组件的ref拼写错了,或者写错了位置,我就因为把ref写到antd的<Modal><Modal/>上而出错了,我最后在<Modal><Modal/>外层添加了一层div,并把ref绑定到div上,最后终于对了,我也是好久才发现的,呜呜!!!

    相关文章

      网友评论

          本文标题:子组件把ref暴露给父组件,父组件调用子组件的方法和变量

          本文链接:https://www.haomeiwen.com/subject/jpwnjrtx.html