React中父组件如何调用子组件的方法?useImperativeHandle就够了,原理级详解

在React中要实现父组件对子组件的方法调用,离不开对React.forwardRef与useImperativeHandle的理解。
如果想直达使用方法,直接看第二点就可以了。如果想要理解透彻,请从开头看起。

1、React.forwardRef: 实现ref属性转发

React.forwardRef会创建一个React组件,能将其自身的 ref 属性转发给其后代组件。

这种技术并不常见,但在以下两种场景中特别有用:

  • 转发 refs 到 DOM 组件
  • 在高阶组件中转发 refs

React.forwardRef 接受一个渲染函数(可理解为一个组件)作为参数。这个函数的参数是props和ref,返回 React 节点。

const FancyButton = React.forwardRef((props, ref) => (
  <button ref={ref} className="FancyButton">
    {props.children}
  </button>
));

// 以下这个 ref 直接指向 

在上述的示例中,React 会将 元素的 ref 作为第二个参数传递给 React.forwardRef 函数中的渲染函数。该渲染函数会将 ref 传递给 元素。
即:FancyButton中的ref传给forwardRef中的ref参数,进而再传给button的ref。

画个图帮助理解:

FancyButton的ref——>FancyButton定义时的 forwraRef((props,ref))——>

你可能感兴趣的:(前端,React,react.js,javascript,前端)