refs转发常见案例

1、转发refs到DOM组件

ref 转发是一个可选特性,其允许某些组件接收 ref,并将其向下传递给子组件。这种特性适用于类似FancyButton 或 MyTextInput 这样的高可复用“叶”组件,这些组件倾向于在整个应用中以一种类似常规 DOM button 和 input 的方式被使用,利用ref转发特性可以方便的访问其 DOM 节点,用来实现管理焦点,选中或动画等。

示例-转发refs到DOM组件

这样,使用 MyButton 的组件可以获取底层 DOM 节点 button 的 ref ,并在必要时访问,就像其直接使用 DOM button 一样。
注意:第二个参数 ref 只在使用 React.forwardRef 定义组件时存在。常规函数和 class 组件不接收 ref 参数,且 props 中也不存在 ref。

2、转发refs到class组件

ref 转发不仅限于 DOM 组件,也可以转发 refs 到 class 组件实例中

示例-转发refs到class组件

如上图,在App组件中通过this.ref.current获取到了底层 DOM 节点 button

3、在高阶组件中转发 refs

这个特性对高阶组件很适用。因为ref不是prop属性,不会被透传下去,如果对高阶组件添加 ref,该 ref 将引用最外层的容器组件,而不是被包裹的组件。利用转发refs这个特性,我们就可以使用 React.forwardRef API 明确地将 refs 转发到内部被包裹的组件。示例如下:
高阶组件(参数为组件,返回值为新组件的函数):

高阶组件HocTest

被包裹的组件:

WrappedComponent -Test

可以看到在HocRefs组件中使用Test,通过this.ref.current可以获取到Test组件中的handleClick方法

HocRefs
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、定义 在React 数据流中,props是父组件与子组件交互的唯一方式。需要修改子组件,要使用新的props来...
    Kevin丶CK阅读 1,582评论 0 2
  • It's a common pattern in React to wrap a component in an ...
    jplyue阅读 3,310评论 0 2
  • 深入JSX date:20170412笔记原文其实JSX是React.createElement(componen...
    gaoer1938阅读 8,106评论 2 35
  • 代码分割 使用Webpack或者Browserify这样的打包工具,最终会生成一个bundle.js,会一次性把代...
    yozosann阅读 785评论 0 1
  • 前端开发面试题 面试题目: 根据你的等级和职位的变化,入门级到专家级,广度和深度都会有所增加。 题目类型: 理论知...
    怡宝丶阅读 2,609评论 0 7