Open
Description
React.forwardRef
一、语法
1.1 实参:是个渲染函数(render function)
(props, ref) => ReactElement
- 可以增加
displayName
属性,方便调试; - 不可以含有
defaultProps
,propTypes
属性。
function RenderFunc(props, ref) {
return (
<button ref={ref} className="FancyButton">
{props.children}
</button>
)
}
RenderFunc.defaultProps = {
className: 'FancyButton'
}
const FancyButton = React.forwardRef(RenderFunc);
React就会warning了:
Warning: forwardRef render functions do not support propTypes or defaultProps. Did you accidentally pass a React component?
并且此时FancyButton.defaultProps
为undefined
。正确的用法是:
function RenderFunc(props, ref) {
return (
<button ref={ref} className={props.className}>
{props.children}
</button>
)
}
const FancyButton = React.forwardRef(RenderFunc);
FancyButton.defaultProps = {
className: 'FancyButton'
}
1.2 返回值:React组件
返回值才是React组件,此时可以才可以添加defaultProps
,propTypes
。
1.3 forwardRef render functions do not support propTypes or defaultProps
-
render function
并不是React组件,其返回值才是React组件。
render function
只是转发ref
的函数,有两个形参(props
,ref
),React组件函数只有一个形参(props
)。 -
defaultProps
,propTypes
专属于React组件的,防止误用React做了校验。