Hooks-useImperativeHandle+forwardRef
使用 ref 时,可用useImperativeHandle
自定义暴露给父组件的实例值,这比命令式使用 ref 更好。
语法
1 | useImperativeHandle(ref, createHandle, [deps]); |
- ref:需要被赋值的 ref 对象。
- createHandle:createHandle 函数的返回值作为 ref.current 的值。
- [deps]:依赖数组,依赖发生变化会重新执行 createHandle 函数。
因为函数式组件没有实例,所以无法使用ref
获取到子组件实例。
这时候可以通过React.forwardRef
包裹子组件,将ref
传递下去,子组件通过第二个参数可接收到ref
。
父组件:
1 | import React, { useEffect, useState, useRef } from 'react'; |
子组件:
通过第二个参数接收ref
1 | import React, { useEffect, useState, useImperativeHandle } from 'react'; |