refs转发
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转发的更多相关文章
- refs转发 React.forwardRef
2020-04-01 refs转发 前几天刚总结完ref&DOM之间的关系,并且想通了3种ref的绑定方式 今天总结一下refs转发 这是react中一直困扰我的一个点 示例: 输入: wor ...
- react中的refs
概述 很久之前就知道refs,感觉好神秘,恰好今天突然发现字符串形式的ref在官网不推荐使用了,于是好好总结一下ref的用法,供以后开发时参考,相信对其他人也有用. 参考资料: Refs & ...
- React/Refs and this DOM
Refs 提供了一种方式,允许我们访问 DOM 节点或在 render 方法中创建的 React 元素. 何时使用Refs 管理焦点,文本选择或媒体播放. 触发强制动画. 集成第三方 DOM 库. 避 ...
- React应用数据传递的方式
1. props属性 典型的React应用,数据通过props按照自上而下(父->子)的顺序传递数据. 2. Context传值 1. 应用场景 对于一些应用中全局性的属性(如UI主题.语言.登 ...
- React Ref 其实是这样的
大家好,我是Mokou,好久没有冒泡了,最近一直在看研究算法和数据结构方面的东西,但是似乎很多前端不喜欢看这种东西,而且目前本人算法方面也很挫,就不献丑了. 当然了,最近也开始研究React了,这篇文 ...
- React组件复用的方式
React组件复用的方式 现前端的工程化越发重要,虽然使用Ctrl+C与Ctrl+V同样能够完成需求,但是一旦面临修改那就是一项庞大的任务,于是减少代码的拷贝,增加封装复用能力,实现可维护.可复用的代 ...
- React Refs-知识点整理记录
一.Refs的作用 通过Refs,可以访问到 1. DOM节点. 2. render方法中创建的React元素.(class组件的实例) 二.访问节点或者实例有什么用?为什么要使用Refs来访问? 访 ...
- 关于react16.4——转发refs和片段Fragment
1.转发refs Ref 转发是一种自动将 ref 通过组件传递给子组件的技术. 一些组件倾向于以与常规 DOM button 和 input 类似的方式在整个应用程序中使用, 并且访问他们的 DOM ...
- React文档(十六)refs和DOM
Refs 提供了一种方式,用于访问在 render 方法中创建的 DOM 节点或 React 元素. 在标准的React数据流中,props是使得父组件和子组件之间交互的唯一方式.你通过props重新 ...
- [转发]深入理解git,从研究git目录开始
转发学习的啦. 似乎很少有人在读某个git快速教程的时候会说:“这个关于git的快速教程太酷了!读完了用起git来超级舒服,并且我一点也不怕自己会破坏什么东西.” 对git的初学者来说,刚接触git时 ...
随机推荐
- Python之subprocess 执行报错
问题 我用subprocess 执行命令查 主机Ip 报错 command = """ "grep {0} /etc/hosts | awk '{print ...
- ARC143D Bridges
ARC143D Bridges 巧妙的图论题. 思路 分析题目,发现很像拆点. 由于拆点要设置出入点,这里我们也把 \(a_i\) 设成入点,把 \(a_i+n\) 设成出点,再次分析问题. 考虑我们 ...
- CommonsBeanUtils1(基于ysoserial)
环境准备 JDK1.8(8u421) JDK8的版本应该都没什么影响,这里直接以我的镜像为准了.commons-beanutils:commons-beanutils:1.9.2.commons-co ...
- 牛客小白月赛105 (Python题解)
牛客小白月赛105 (Python题解) 比赛链接:点击传送 A-lz的吃饭问题 代码: a, b = map(int,input().split()) c, d = map(int,input(). ...
- python爬虫 正则表达式详解
正则表达式 最近学校布置了一个关于python爬虫的期末作业,而我之前对python爬虫一直都比较感兴趣但是没有系统的学过,就想借此机会开个新坑来系统学习和应用python爬虫,那我们开始吧 正则表达 ...
- MyBatis源码研究-缓存
在学习Hibernate中,经常有看到一级缓存和二级缓存的概念,并且有了解到,一级缓存是session级别的缓存一般缓存在内存中,二级缓存是指sessionfactory级别的缓存,一般缓存在内存或者 ...
- 0-JavaScript入门
1.1 JS用途 JavaScript属于一门脚本语言,可用于前端给网页添加一些动态效果. 也可用于node平台,开发服务器 React.Vue框架底层也是通过JS实现 1.2 JS组成 前端分为三层 ...
- windows 上部署 kafka 做测试
1.下载 需要下载 zookeeper 和kafka 我下载的版本是 2.部署 2.1 部署 zookeeper 2.1.1 新建配置文件 zoo.cfg 内容为 tickTime = 2000 da ...
- OceanBase 的探索与实践
作者:来自 vivo 互联网数据库团队- Xu Shaohui 本文总结了目前我们遇到的痛点问题并通过 OceanBase 的技术方案解决了这些痛点问题,完整的描述了 OceanBase 的实施落地, ...
- uni-app Vue3项目引入Tailwind CSS
前情 Tailwind CSS 是一个原子类 CSS 框架,它将基础的 CSS 全部拆分为原子级别,同时还补全各种浏览器模式前缀,兼容性也不错.它的工作原理是扫描所有 HTML 文件.JavaScri ...