1. Ref 和Dom,Ref是reference(引用)的简写。

    1. 能力:大多数情况下,props前递可以解决一切问题,但是依然有需要触达React实例或者Dom节点的情况,这时候应该使用React Ref。
    2. 使用:
      1. 用来处理立即执行的动画。
      2. 用来处理非受控组件的焦点,什么是受控/非受控组件参考文章
      3. 用来与第三方库对接,我知道的有d3 或者 cocos。
  2. React.forwardRef((props,ref)=><Compnent>)

    1. 简而言之就是自动透传引用(Ref),能让组件接收传过来的ref, 向下(或者说向前)传递Ref。

      const FancyButton = React.forwardRef((props, ref) => (
      <button ref={ref} className="FancyButton">
      {props.children}
      </button>
      )); // You can now get a ref directly to the DOM button:
      const ref = React.createRef();
      <FancyButton ref={ref}>Click me!</FancyButton>;  
    2. 上述代码的解释:

      1. 首先创建了一个ref, 这个ref的目的就是抓到孙子组件中的input节点
      2. 通过组件属性把ref传给子组件<FancyButton>
      3. 子组件通过React.forwardRef透传props和ref,这里ref才是我们要注意的点。
      4. 参数ref赋值给孙子组件<button>
      5. 这个ref就能抓到孙子组件的实例。
  3. React.forwardRef((props, ref)=><Componnet>)在高阶组件中的使用:

    1. 比如我们写一个打印前后属性的高阶组件logProps,这个高阶组件能够透传ref

       1 function logProps(Component) {
      2 class LogProps extends React.Component {
      3 componentDidUpdate(prevProps) {
      4 console.log('old props:', prevProps);
      5 console.log('new props:', this.props);
      6 }
      7
      8 render() {
      9 const {forwardedRef, ...rest} = this.props;
      11 // 把常规属性"forwardedRef"作为ref赋值给传过来的Component组件
      12 return <Component ref={forwardedRef} {...rest} />;
      13 }
      14 }
      15
      16 // 注意React.forwardRef提供的第二个参数ref.
      17 // 我们可以把ref作为一个常规属性"forwardedRef"传给LogProps这个组件
      18 // 就可以跟实例绑定.
      19 return React.forwardRef((props, ref) => {
      20 return <LogProps {...props} forwardedRef={ref} />;
      21 });
      22 }

React Ref 和 React forwardRef的更多相关文章

  1. react ref获取dom对象

    react文档 step = React.createRef(); // init <div ref={this.step}></div> // bind componentD ...

  2. React ref的用法

    React的ref有3种用法: 1. 字符串(已废弃)2. 回调函数3. React.createRef() (React16.3提供) 1. 字符串 最早的ref用法. 1.dom节点上使用,通过t ...

  3. React Ref 其实是这样的

    大家好,我是Mokou,好久没有冒泡了,最近一直在看研究算法和数据结构方面的东西,但是似乎很多前端不喜欢看这种东西,而且目前本人算法方面也很挫,就不献丑了. 当然了,最近也开始研究React了,这篇文 ...

  4. React评论展示案例(包含知识点:state、props、ref、React声明周期、localStorage本地存储等)

    本案例在上一篇的案例(React组件之间通过Props传值的技巧(小案例,帮助体会理解props.state.受控组件和非受控组件等))的基础上加强功能和用户体验,但是当然还有很多需要改进的地方,后期 ...

  5. [react] 细数 React 的原罪

    Props & onChange 的原罪 .「props & onChange 接口规范」它不是一个典型的「程序接口规范」. 当你拿到一个可视组件的 ref,却没有类似 setProp ...

  6. [React] 从零开始的react

    组件 1. 无状态组件 在React中,组件的名字必须用大写字母开头,而包含该组件定义的文件名也应该是大写字母(便于区分,也可以不是). 无状态组件是纯展示组件,仅仅只是用于数据的展示,只根据传入的p ...

  7. [React] 03 - Intro: react.js in twelve demos

    Ref: React 入门实例教程 这算什么,react学习例子的十二门徒?哈哈 如何运行别人的react项目? Ref: [React全家桶入门之CODE]项目代码与使用方法 使用git克隆项目到本 ...

  8. React Native之React速学教程(中)

    概述 本篇为<React Native之React速学教程>的第一篇.本篇将从React的特点.如何使用React.JSX语法.组件(Component)以及组件的属性,状态等方面进行讲解 ...

  9. React Native之React速学教程(上)

    概述 本篇为<React Native之React速学教程>的第一篇.本篇将从React的特点.如何使用React.JSX语法.组件(Component)以及组件的属性,状态等方面进行讲解 ...

随机推荐

  1. ubuntu linux 修改ip 超扎心。

    老大说“终于搞定了,快记下来,不然以后又忘了”(露出慈母般的微笑) 参考地址:https://jingyan.baidu.com/article/adc815139ddcc4f723bf7339.ht ...

  2. SpringBootSecurity学习(10)网页版登录之记住我功能

    场景 很多登录都有记住我这个功能,在用户登陆一次以后,系统会记住用户一段时间,在这段时间,用户不用反复登陆就可以使用我们的系统.记住用户功能的基本原理如下图: 用户登录的时候,请求发送给过滤器User ...

  3. Spring boot 官网学习笔记 - Spring Boot 属性配置和使用(转)-application.properties

    Spring Boot uses a very particular PropertySource order that is designed to allow sensible overridin ...

  4. 转载:Docker入门只需看这一篇就够了

    最近项目中需要用到 Docker 打包,于是上网查找资料学习了 Docker 的基本命令,记录一下自己遇到的一些错误. 准备开始自己写,结果看到了阮一峰老师的文章,瞬间就没有写下去的动力了,转载大佬的 ...

  5. json与java对象的转换,以及struts2对json的支持,实现ajax技术

    这两天学的东西有点多,今天抽个时间写下来,以此作为激励,这两天学了json,ajax,jQuery 一.使用第三方的工具java转换为json类型 首先就是java类型转换为json对象,首先要导入第 ...

  6. 3DEarth PPT :一款专为GIS系统研发的三维汇报演示系统

    3DEarth PPT(三维地球汇报演示系统)又称 3DGis PPT,是专为GIS系统研发的三维汇报演示系统.对有3DGis系统的客户它可以作为一个组件(dll)嵌入原系统,对没有3DGis系统的客 ...

  7. 一个随意list引发的惨案(java到底是值传递还是引用 传递?)

    前两天写了一个递归,因为太年轻,把一个递归方法需要用到的list定义该递归方法外了,结果开始断点测试的时候有点小问题 ,然后上线之后因为数据量太多导致了一个java.util.ConcurrentMo ...

  8. 尝鲜 vue3.x 新特性 - CompositionAPI

    0. 基础要求 了解常见的 ES6 新特性 ES6 的导入导出语法 解构赋值 箭头函数 etc... 了解 vue 2.x 的基本使用 组件 常用的指令 生命周期函数 computed.watch.r ...

  9. 软件开发工具(第7章:Eclipse入门)

    一.Eclipse简介 Eclipse [iˈklips],是一个开放源代 码的.基于Java的可扩展集成应 用程序开发环境. Eclipse最初主要用来进行Java语 言开发,但并非只有这个用途. ...

  10. vue使用vant-ui实现上拉加载、下拉刷新和返回顶部

    vue使用vant-ui实现上拉加载.下拉刷新和返回顶部 vue现在在移动端常用的ui库有vant-ui和mint-ui,上拉加载.下拉刷新和返回顶部也是移动端最基础最常见的功能.下面就用vant-u ...