React Ref 和 React forwardRef
Ref 和Dom,Ref是reference(引用)的简写。
- 能力:大多数情况下,props前递可以解决一切问题,但是依然有需要触达React实例或者Dom节点的情况,这时候应该使用React Ref。
- 使用:
- 用来处理立即执行的动画。
- 用来处理非受控组件的焦点,什么是受控/非受控组件参考文章。
- 用来与第三方库对接,我知道的有d3 或者 cocos。
React.forwardRef((props,ref)=><Compnent>)
- 简而言之就是自动透传引用(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>; 上述代码的解释:
- 首先创建了一个ref, 这个ref的目的就是抓到孙子组件中的input节点
- 通过组件属性把ref传给子组件<FancyButton>
- 子组件通过React.forwardRef透传props和ref,这里ref才是我们要注意的点。
- 参数ref赋值给孙子组件<button>
- 这个ref就能抓到孙子组件的实例。
- 简而言之就是自动透传引用(Ref),能让组件接收传过来的ref, 向下(或者说向前)传递Ref。
React.forwardRef((props, ref)=><Componnet>)在高阶组件中的使用:
- 比如我们写一个打印前后属性的高阶组件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 }
- 比如我们写一个打印前后属性的高阶组件logProps,这个高阶组件能够透传ref
React Ref 和 React forwardRef的更多相关文章
- react ref获取dom对象
react文档 step = React.createRef(); // init <div ref={this.step}></div> // bind componentD ...
- React ref的用法
React的ref有3种用法: 1. 字符串(已废弃)2. 回调函数3. React.createRef() (React16.3提供) 1. 字符串 最早的ref用法. 1.dom节点上使用,通过t ...
- React Ref 其实是这样的
大家好,我是Mokou,好久没有冒泡了,最近一直在看研究算法和数据结构方面的东西,但是似乎很多前端不喜欢看这种东西,而且目前本人算法方面也很挫,就不献丑了. 当然了,最近也开始研究React了,这篇文 ...
- React评论展示案例(包含知识点:state、props、ref、React声明周期、localStorage本地存储等)
本案例在上一篇的案例(React组件之间通过Props传值的技巧(小案例,帮助体会理解props.state.受控组件和非受控组件等))的基础上加强功能和用户体验,但是当然还有很多需要改进的地方,后期 ...
- [react] 细数 React 的原罪
Props & onChange 的原罪 .「props & onChange 接口规范」它不是一个典型的「程序接口规范」. 当你拿到一个可视组件的 ref,却没有类似 setProp ...
- [React] 从零开始的react
组件 1. 无状态组件 在React中,组件的名字必须用大写字母开头,而包含该组件定义的文件名也应该是大写字母(便于区分,也可以不是). 无状态组件是纯展示组件,仅仅只是用于数据的展示,只根据传入的p ...
- [React] 03 - Intro: react.js in twelve demos
Ref: React 入门实例教程 这算什么,react学习例子的十二门徒?哈哈 如何运行别人的react项目? Ref: [React全家桶入门之CODE]项目代码与使用方法 使用git克隆项目到本 ...
- React Native之React速学教程(中)
概述 本篇为<React Native之React速学教程>的第一篇.本篇将从React的特点.如何使用React.JSX语法.组件(Component)以及组件的属性,状态等方面进行讲解 ...
- React Native之React速学教程(上)
概述 本篇为<React Native之React速学教程>的第一篇.本篇将从React的特点.如何使用React.JSX语法.组件(Component)以及组件的属性,状态等方面进行讲解 ...
随机推荐
- 用.NET做动态域名解析
用.NET做动态域名解析 动态域名解析,或DNSR,通常用于解析IP地址经常变化的域名.电信网络提供了公网IP,给广大程序员远程办公.内容分享等方面带来了极大的便利.但公网IP是动态的,它会经常变化, ...
- springboot 使用freemarker自定义标签
1.pom依赖引入 <dependencies> <dependency> <groupId>org.springframework.boot</groupI ...
- 中缀表达式转后缀表达式(Java代码实现)
后缀表达式求值 后缀表达式又叫逆波兰表达式,其求值过程可以用到栈来辅助存储.例如要求值的后缀表达式为:1 2 3 + 4 * + 5 -,则求值过程如下: 遍历表达式,遇到数字时直接入栈,栈结构如下 ...
- python openpyxl内存不主动释放 ——关闭Excel工作簿后内存依旧(MemoryError)
在openpyxl对Excel读写操作过程中,发现内存没有马上释放,如果得多次读取大文件,内存爪机,后续代码就无法运行. 尝试:各种wb.save()或者with open等途径无法解决. 发现:因为 ...
- MongoDB 学习笔记之 group聚合
group聚合: key: 分组字段 cond:过滤条件 reduce: curr是当前行 result是每组的结果集 initial : 组变量初始值 finalize: 统计一组后的回调函数 用g ...
- yii2 rules 规则
required : 必须值验证属性 [['字段名'],required,'requiredValue'=>'必填值','message'=>'提示信息']; #说明:CRequiredV ...
- Spring Boot 2.X(三):使用 Spring MVC + MyBatis + Thymeleaf 开发 web 应用
前言 Spring MVC 是构建在 Servlet API 上的原生框架,并从一开始就包含在 Spring 框架中.本文主要通过简述 Spring MVC 的架构及分析,并用 Spring Boot ...
- 对BFC规范的理解
什么是BFC? BFC 全称为 块级格式化上下文(Block Fromatting Context),是Web页面的可视化CSS渲染出的一部分.它是块级盒布局出现的区域,也是浮动层元素进行交互的区域. ...
- Tensorflow-gpu1.13.1 和 Tensorflow-gpu2.0.0共存之安装教程
tf1.13.1 及 tf2.0.0 相关依赖及版本 硬件说明:显卡NVIDIA-GEFORCE-GTX-1060 1.驱动版本检查,并且更新显卡驱动[这一步很重要,你的驱动版本低了,cuda及cu ...
- restTemplate getForObject中map传参问题
在使用restTemplate中getForObject的map传参形式时: 开始时我是这么调用的: RestTemplate rest = new RestTemplate(); Map<St ...