第一种 字符串的ref
ref=“myRef” 里面的绑定是字符串的绑定用法,这种ref的形式写多了影响效率问题,官方文档已经不推荐此写法

//创建类式组件class Demo extends React.Component {//点击按钮showData = () => {const { input1 } = this.refs;alert(input1.value);};showData2 = () => {const { input2 } = this.refs;alert(input2.value);};render() {return (<div><input type="text" ref="input1" placeholder="点击按钮提示数据" /><button onClick={this.showData}>点我提示左侧的数据</button><inputtype="text"ref="input2"onBlur={this.showData2}placeholder="失去焦点提示数据"/></div>);}}

第二种 回调形式的ref的用法

  //创建类式组件class Demo extends React.Component {//点击按钮showData = () => {const { input1 } = this;alert(input1.value);};showData2 = () => {const { input2 } = this;alert(input2.value);};render() {return (<div><inputtype="text"ref={(c) => (this.input1 = c)}placeholder="点击按钮提示数据"/><button onClick={this.showData}>点我提示左侧的数据</button><inputtype="text"ref={(c) => (this.input2 = c)}onBlur={this.showData2}placeholder="失去焦点提示数据"/></div>);}}**这种回调形式的写法也发现了问题 就是调用次数比较多
在点击更新组件的时候:
首先render函数先将原来的回调清空,赋值为null,然后才重新渲染 所以出现两次执行情况**虽然不影响使用,单如果想要达到最优的效果可以稍微改进一下写法://创建类式组件class Demo extends React.Component {//点击按钮showData = () => {const { input1 } = this;alert(input1.value);};showData2 = () => {const { input2 } = this;alert(input2.value);};//回调形式的refinput2 = (c) => (this.input2 = c);render() {return (<div><inputtype="text"ref={(c) => (this.input1 = c)}placeholder="点击按钮提示数据"/><button onClick={this.showData}>点我提示左侧的数据</button><inputtype="text"// {ref={(c) => (this.input2 = c)}}  这种方式的话每次渲染都得重新生在更新的时候出现c返回null情况 虽然不影响使用 但也可以使用以下这种方式改进ref={this.input2}onBlur={this.showData2}placeholder="失去焦点提示数据"/></div>);}}

第三种 API(React.createdRef())容器的ref的用法— 目前是官方推荐使用最新的方式

export default class App extends Component {
myRef = React.createRef()
//点击获取inut的数据
showData = () => {
console.log(this.myRef.current.value)
}
render() {return <div >< input type = "text" ref = {this.myRef}/> <button onClick = {this.showData} > 点击显示输入框的数据 < /button> < /div >}
}

react的ref三种用法相关推荐

  1. react的ref三种使用方式,获取元素内容

    react的ref三种使用方式,获取元素内容. 注意:应尽可能少的使用ref,优先使用state 1.字符串 refGetData1=()=>{alert("获取到的内容:" ...

  2. vue中$refs的三种用法

    我们都知道,在vue2中获取DOM元素,可以直接在元素上绑定ref属性,然后获取到DOM元素的属性值,这种方法在vue3 中仍然可以使用,但也会有一些问题.下面就介绍$refs的三种用法: 1.vue ...

  3. using 的三种用法

    using 有哪三种用法? 1)引入命名空间. 2)给命名空间或者类型起别名. 3)划定作用域.自动释放资源,使用该方法的类型必须实现了 System.IDisposable接口,当对象脱离作用域之后 ...

  4. static的三种用法,定义静态变量,静态函数,静态代码块!

    static的三种用法,定义静态变量,静态函数,静态代码块! 1.定义静态变量 class PersonStatic { //静态变量的特点 //1.静态变量无需生成对象就可被调用,可以使用类名和对象 ...

  5. Vue——基本的代码结构和插值表达式、v-cloak||Vue指令之v-text和v-html||v-bind的三种用法||Vue指令之v-on

    Vue的基本代码 <!DOCTYPE html> <html lang="en"><head><meta charset="UT ...

  6. SQL、LINQ、Lambda 三种用法(转)

    SQL.LINQ.Lambda 三种用法 颜色注释: SQL LinqToSql Lambda QA 1. 查询Student表中的所有记录的Sname.Ssex和Class列. select sna ...

  7. 标准SQL的update语句三种用法

    标准SQL的update语句三种用法 一.环境: MySQL-5.0.41-win32 Windows XP professional   二.建立测试环境:   DROP TABLE IF EXIS ...

  8. C++容器的insert()函数有以下三种用法: 最终*it=val;

    C++容器的insert()函数有以下三种用法: 最终*it=val; //用法1:在指定位置it前"插入"值为val的元素,返回指向这个元素的迭代器, iterator inse ...

  9. 微课系列(6):Python关键字else的三种用法

    技术要点:Python关键字else在选择结构.循环结构和异常处理结构中的三种用法. ----------相关阅读---------- 教学课件 1900页Python系列PPT分享一:基础知识(10 ...

最新文章

  1. 从智能客服说起,看小i机器人如何用AI赋能产业升级改造|M-TECH AI助力中国智造产业论坛...
  2. WPF多表头技术探索总结
  3. 来,看看你的单片机程序有多大!
  4. 【总结整理】JavaScript的DOM事件学习(慕课网)
  5. 可变参数列表来实现printf函数的输出
  6. 深度学习课程笔记(十三)深度强化学习 --- 策略梯度方法(Policy Gradient Methods)...
  7. MySQL 计算字段长度函数LENGTH()与CHAR_LENGTH()
  8. HTML语言剖析(二)HTML标记一览
  9. html三个div相同高度,Html三个div并排,高度相同
  10. 华为服务器系统启动项,服务器设置开机启动项
  11. 全国城市邮编数据库 全国省市区邮编 全国城市邮编数据大全
  12. UML - 类图的关系总结
  13. STM32F401RCT6最小系统原理图设计
  14. VMware虚拟机文件格式详解
  15. linux安装frps服务,Debian手动搭建frps服务端
  16. mysql ctrl+y_mysql操作
  17. Apache Dubbo官网推荐使用建议
  18. java数字金额大写金额_Java实现 “ 将数字金额转为大写中文金额 ”
  19. 一个积分不等式的再讨论
  20. Please don't stop rua 233333

热门文章

  1. 数据库并发事务存在的问题(脏读、不可重复读、幻读等)
  2. Elasticsearch——分页查询FromSize VS scroll
  3. 【视频回放】 维塔士+龙智:数字化打造游戏行业「头号玩家」
  4. 图片瀑布流差异化设计尝试
  5. 聚合供应链是什么,聚合供应链中台能给商户带来什么样的价值
  6. 脑洞成现实!AI系统可提前10s预测地震
  7. MQ-5 可燃气体传感器与 Arduino 接口
  8. 高桥盾react和boost_React和Boost哪个更好 耐克React和阿迪Boost有什么区别
  9. Flink跟着问题读源码 - SlidingEventTimeWindows接reduce结果数据倍增
  10. word嵌入对象依损坏_word模板损坏修复