在父组件中通过ref来调用子组件的方法

53 阅读2分钟

一般 ,我们就通过父组件向子组件传递数据,或者方法(从而获取子组件想要传递到父组件的数据),在子组件通过props 接收,以此达到数据的单向数据流,数据流动的方向仍然是从父组件到子组件(通过props传递方法),而子组件则通过回调函数将事件或数据传递回父组件

如果说 我现在不想通过props 传递了,我就想直接 在父组件里面调用子组件方法,改变子组件的属性呢? 这个岂不是违背了单向数据流???

可以采用 ref 的方式处理

子组件

首先 在子组件中,需要引入 react 的两个属性 useImperativeHandle forwardRef

image.png

React.forwardRef 和 useImperativeHandle 是 React 中用于处理函数组件与 ref 相关的两个高级 API。它们允许函数组件接收和使用 ref,这在某些场景下非常有用,比如当你需要将一个函数组件暴露给某些依赖于 ref 的库或者需要在父组件中直接访问子组件的方法或属性时。

React.forwardRef 是一个高阶组件(HOC),它接收一个渲染函数作为参数,并返回一个新的函数组件。这个新的组件能够接收一个 ref 属性,并将其转发到渲染函数中的一个子组件上

useImperativeHandle 是一个自定义 Hook,它允许你在使用 React.forwardRef 的函数组件中定制暴露给父组件的实例值。这个 Hook 应该在函数组件内部与 React.forwardRef 一起使用。

只有在 子组件内部 使用这两个属性包裹,这个方法才被暴露出去了,在父组件才可以调用

父组件

在父组件中 给这个子组件绑定ref

const hmaccordionRef = useRef(null)

image.png

image.png

以上就可以实现 父组件调用子组件的方法,通过ref了