ref的作用是获取实例,可能是DOM实例,也可能是classComponent的实例。
问题:
- 如果目标组件是一个Function Component的话,是没有实例的(PureComponent),此时用ref去传递会报错
- 如果你是一个库的开发者的话,使用该库的人是不知道库的组件类别的,那么当库的组件类别是Function Component的时候,使用者想用ref获取组件,怎么办?
- redux中的connect方法将组件包装成高阶组件(HOC),那么我如何通过ref去获取包装前的组件实例?
- props不能传递ref
React.forwardRef 存在的意义就是为了解决以上问题
用法:
import React from 'react'
const TargetComponent = React.forwardRef((props, ref) => <input type="text" ref={ref} />)
export default class Comp extends React.Component {
constructor(props) {
super(props)
this.ref = React.createRef()
}
componentDidMount() {
this.ref.current.value = 'ref get input'
}
render() {
return <TargetComponent ref={this.ref} />
}
}