Refs 转发
Forwarding-Refs
Ref 转发是一项将 ref 自动地通过组件传递到其一子组件的技巧
转发 Refs 到 DOM 组件
```jsx harmony
function FancyButton(props) { return ( {props.children} ) }
FancyButton 使用 React.forwardRef 来获取传递给它的 ref,然后转发到它渲染的 DOM button
逐步解释:
通过 React.crateRef 创建了一个 React ref 并将其赋值给 ref 变量
指定 ref 为 JSX 属性,将其向下传递给
<FancyButton ref={ref}>
React 传递 ref 给 forwardRef 内函数 (props, ref) => ... 作为第二个参数
向下转发 ref 参数到
<button ref={ref}>
,将其指定为 JSX 属性当 ref 挂载完成,ref.current 将指向 button DOM 节点
第二个参数 ref 只有在使用 React.forwardRef 定义组件时存在,常规函数 和 class组件不接收 ref 参数,且 props 中也不存在 ref
组件库维护者的注意事项
当你开始在组件库中使用 forwardRef 时,你应当将其视为一个破坏性更改
因为你的库可能会有明显不同的行为
这样可能会导致依赖旧行为的应用和其他库崩溃
在高阶组件 HOC 中转发 refs
```jsx harmony
function logProps(Component) { class LogProps extends React.Component { componentDidUpdate(prevProps) { console.log('old props:', prevProps); console.log('new props:', this.props); }
}
// 注意 React.forwardRef 回调的第二个参数 “ref”。 // 我们可以将其作为常规 prop 属性传递给 LogProps,例如 “forwardedRef” // 然后它就可以被挂载到被 LogProps 包裹的子组件上。 return React.forwardRef((props, ref) => { return ; }); }
```
最后更新于
这有帮助吗?