ref 转发不但可以转发指向具体的dom组件,也可以指向class组件的实例
import React from 'react'
import ReactDOM from 'react-dom'; //ref 转发不但可以转发指向具体的dom组件,也可以指向class组件的实例
class Button extends React.Component{
constructor(props){
super(props);
this.handClick = this.handClick.bind(this);
this.ccref = React.createRef();
}
handClick(){
alert('我是事件')
}
render(){
return (
<button ref={this.ccref}></button>
)
}
} const Input = React.forwardRef((props,ref)=>{
return (
<div>
<Button ref={ref} />
<button>点击我</button>
</div>
)
}) class App extends React.Component{
constructor(props){
super(props);
this.cref = React.createRef();
}
componentDidUpdate(prevProps){ }
componentDidMount(){
    //this.cref指向的是class button组件的实例  
console.log(this.cref.current.ccref)
console.log(this.cref.current.handClick())
}
render(){
return (
<Input ref={this.cref} />
)
}
} ReactDOM.render(<App />,document.getElementById('root'));
import { extend } from 'lodash';
import React, { useEffect, useRef, useState } from 'react'
import ReactDOM from 'react-dom'; function usePrevious(count){
const iref = useRef();
useEffect(() => {
iref.current = count;
});
return iref.current
} //如何获取上一轮的props或state
//这就说明ref的值改变并不会通知到我们不会使组件重新渲染
function App(){
const [count,setCount] = useState(0);
const prevCount = usePrevious(count);
const countRef = useRef();
//解决这个问题你可以手动创建个ref 保存他修改他并读取他
//除非你正在做懒加载否则不要在渲染阶段去设置refs 你应该在事件处理函数或者是useeffect中去设置refs
//如果想要在异步的回调中获取最新的state 你可以手动创建个ref 用来保存他 修改他 并读取他
function handleClick(){
setTimeout(() => {
alert(countRef.current)
}, 3000);
}
useEffect(() => {
countRef.current = count
});
return (
<div>
{count}-上一个值:{prevCount}
<button onClick={()=>setCount(count+1)}>
点击我
</button>
<button onClick={handleClick}>show alert</button>
</div>
)
} ReactDOM.render(<App />, document.getElementById('root'));

  

refs转发的更多相关文章

  1. refs转发 React.forwardRef

    2020-04-01 refs转发 前几天刚总结完ref&DOM之间的关系,并且想通了3种ref的绑定方式 今天总结一下refs转发 这是react中一直困扰我的一个点 示例: 输入: wor ...

  2. react中的refs

    概述 很久之前就知道refs,感觉好神秘,恰好今天突然发现字符串形式的ref在官网不推荐使用了,于是好好总结一下ref的用法,供以后开发时参考,相信对其他人也有用. 参考资料: Refs & ...

  3. React/Refs and this DOM

    Refs 提供了一种方式,允许我们访问 DOM 节点或在 render 方法中创建的 React 元素. 何时使用Refs 管理焦点,文本选择或媒体播放. 触发强制动画. 集成第三方 DOM 库. 避 ...

  4. React应用数据传递的方式

    1. props属性 典型的React应用,数据通过props按照自上而下(父->子)的顺序传递数据. 2. Context传值 1. 应用场景 对于一些应用中全局性的属性(如UI主题.语言.登 ...

  5. React Ref 其实是这样的

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

  6. React组件复用的方式

    React组件复用的方式 现前端的工程化越发重要,虽然使用Ctrl+C与Ctrl+V同样能够完成需求,但是一旦面临修改那就是一项庞大的任务,于是减少代码的拷贝,增加封装复用能力,实现可维护.可复用的代 ...

  7. React Refs-知识点整理记录

    一.Refs的作用 通过Refs,可以访问到 1. DOM节点. 2. render方法中创建的React元素.(class组件的实例) 二.访问节点或者实例有什么用?为什么要使用Refs来访问? 访 ...

  8. 关于react16.4——转发refs和片段Fragment

    1.转发refs Ref 转发是一种自动将 ref 通过组件传递给子组件的技术. 一些组件倾向于以与常规 DOM button 和 input 类似的方式在整个应用程序中使用, 并且访问他们的 DOM ...

  9. React文档(十六)refs和DOM

    Refs 提供了一种方式,用于访问在 render 方法中创建的 DOM 节点或 React 元素. 在标准的React数据流中,props是使得父组件和子组件之间交互的唯一方式.你通过props重新 ...

  10. [转发]深入理解git,从研究git目录开始

    转发学习的啦. 似乎很少有人在读某个git快速教程的时候会说:“这个关于git的快速教程太酷了!读完了用起git来超级舒服,并且我一点也不怕自己会破坏什么东西.” 对git的初学者来说,刚接触git时 ...

随机推荐

  1. 弱口令、子域名、md5、伪随机数、目录爆破与CTF实战

    web 21--弱口令爆破&custom iterator 进去要求输入账号密码,账号输入admin,一般来说管理员用户名都会是这个,密码随便输,然后burpsuite抓包 可以看到账号密码在 ...

  2. Mysql数据库个人整理笔记

    数据类型 tinyint/smallint/int/bigint float double char/varchar date/time/datetime/timestamp DDL 数据库 crea ...

  3. K均值聚类和代码实现

    K均值聚类是一种无监督学习分类算法. 介绍 对于$n$个$m$维特征的样本,K均值聚类是求解最优化问题: $\displaystyle C^*=\text{arg}\min\limits_{C}\su ...

  4. highcharts在vue中的应用

    1.安装命令 npm install highcharts --save 2.在页面中按需引入 import Highcharts from 'highcharts/highstock'; impor ...

  5. log4j2 变量注入漏洞(CVE-2021-44228)

    log4j2 JNDI注入漏洞(CVE-2021-44228) 概述 本文非常详细的从头到尾debug了CVE-2021-44228漏洞的利用过程,喜欢的师傅记得点个推荐~ Apache Log4j2 ...

  6. npm depcheck 包依赖检查

    1.概述 在前端开发时,如果经常会遇到一些依赖的问题,比如一个项目,之前在 package.json安装了某个包,后来又删除了这个包,但是node_modules 包还是在的,但是我们把代码给其他人安 ...

  7. LSTM学习三维轨迹的Python实现

    一.引言 长短期记忆网络(LSTM)是一种强大的递归神经网络(RNN),广泛应用于时间序列预测.自然语言处理等任务.在处理具有时间序列特征的数据时,LSTM通过引入记忆单元和门控机制,能够更有效地捕捉 ...

  8. docker compose的安装

    1,安装docker ### CentOS8 默认是会读取centos.org的mirrorlist的,所以一般来说是不需要配置镜像的. # step 1: 安装必要的一些系统工具 sudo yum ...

  9. Gmssl编译问题: error while loading shared libraries: libssl.so.1.1: cannot open shared object file

    在Centos7上编译安装Gmssl后,运行gmssl version出现如下错误: gmssl: error while loading shared libraries: libssl.so.1. ...

  10. 【转载】 一次生产环境的NOHTTPRESPONSEEXCEPTION异常的排查记录

    https://www.freesion.com/article/41531004212/ 环境: jdk1.8+tomcat8+httpclient4.5.2 主要现象: 项目偶发出现org.apa ...