react之ref

2023-11-11

        ref在react中是一个对象,它有一个current属性,可以对这个属性进行操作,用于获取DOM元素和保存变化的值。常用的案例是input标签来展示和实践。推荐方法:在函数式组件中调用useRef()函数和在类组件中调用createRef()函数,它们返回ref对象。在组件的整个生命周期中,ref对象一直存在:组件挂载,ref对象创建,组件销毁,ref对象销毁。

一、使用场景

1、点击按钮让输入框聚焦

2、动画效果,例如移动,变大变小

二、案例体验

(一)在类组件中使用ref

1、使用字符串的方式【已经弃用】

(1)给 标签 / 组件  设置  ref="标签名"

(2)通过 this.refs.标签名 访问,ref可以获取到应用的 真实dom / 组件对象

        this.refs.iptRef      获取标签

        this.refs.iptRef.value  获取标签单前值

import React, { Component } from 'react'

export default class App3 extends Component {
  render() {
    return (
      <div>
          {/* 
          已经弃用 :
            1、给 标签 / 组件  设置  ref="标签名" 
            2、通过 this.refs.标签名 访问,ref可以获取到应用的 真实dom / 组件对象
          */}
          <input ref="iptRef"/>
          <button onClick={()=>{console.log(this.refs.iptRef.value);}}>add</button> 
      </div>
    )
  }
}

2、使用createRef方法【推荐使用】

(1)全局定义一个变量  myRef = React.createRef()

(2)在标签中通过ref={this.myRef}绑定

(3)访问 this.myRef.current

        this.refs.current      获取标签

        this.refs.current.value  获取标签单前值

import React, { Component } from 'react'

export default class App3 extends Component {
    //  1、全局定义一个变量  myRef = React.createRef()
    myRef = React.createRef()
  render() {
    return (
      <div>
          {/* 
          新的写法:
            1、全局定义一个变量  myRef = React.createRef()
            2、在标签中通过ref={this.myRef}绑定
            3、访问 this.myRef.current
          */}
          <input ref={this.myRef} />
          <button onClick={()=>{
              console.log(this.myRef.current.value);
          }}>add</button>
      </div>
    )
  }
}

 3、注意

        当ref与setState合用的时候,会出现一些坑,DOM的获取并不及时,原因是setState是异步的,如果需要在数据变化(页面更新)之后获取DOM,我们要把获取DOM的语法,放在setState的第二个参数里,setState的第二个参数是一个函数,我们可以把获取DOM的逻辑放在里边。setState的第二个参数会在setState异步执行完毕之后执行。这样就能保证,当第二个参数执行的时候,页面已经被更新完了。

(二)在函数式组件中使用ref

1、使用useRef()方法【推荐使用】

 (1)通过useRef()函数定义一个变量,可以给一个初始值

 (2)通过ref绑定标签

 (3)通过myRef.current访问

         myRef.current      获取标签

         myRef.current.value  获取标签单前值

import React ,{useRef}from 'react'

export default function App4() {
    // 1、通过useRef()函数定义一个变量,可以给一个初始值
    const myRef = useRef()
  return (
    <div>
        {
            /* 
            函数式组件:
                1、通过useRef()函数定义一个变量,可以给一个初始值
                2、通过ref绑定标签
                3、通过myRef.current访问
            */
        }
        <input ref={myRef} />
        <button onClick={()=>{
             console.log(myRef.current.value);
        }}>add</button>
    </div>
  )
}

        实际上,能不操作dom就不要操作dom,但是有时候实际开发中会遇到一些比较复杂的场景,必须使用的时候才使用,比如动画。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

react之ref 的相关文章

  • 使用 javascript 更改 div 颜色

    div style height 20px width 100 background color 000000 div br
  • Javascript DOM setAttribute 在函数调用中不起作用

    我有一个带有输入元素的 HTML 文件 我希望向其中添加一个名为 valid fieldset011 的新属性 该属性用作 AngularJS 验证器的链接 输入元素具有属性 id fieldset011 如果我使用以下脚本 包含在脚本标签
  • 仅单击 div 内部

    我正在为一个小网站制作教程 我只想让教程气泡可点击 因此 当我们尝试单击气泡之外的某些内容时 什么也不会发生 换句话说 我希望我的 html 不可点击 而 tutorial bubble 可点击 尝试这个 jQuery function h
  • Javascript - 在加载所有图像后执行

    看了别人的问题我想 window onload 会回答我的问题 我已经尝试过这个 但它会在页面加载时立即执行代码 而不是在图像加载之后 如果有什么区别的话 图像来自 CDN 并且不是相对的 有人知道解决办法吗 我没有使用 jQuery 想要
  • 创建一个简单的 10 秒倒计时

    我想要一行这样写的 Your download will begin in 10 9 8 etc Beginning on page load seconds 我已经设置了 10 秒下载文本 并且我还查看了其他 stackoverflow
  • html 表格单元格的条件格式

    是否有现成的解决方案可以对 HTML 表格进行条件格式设置 通过条件格式 我更感兴趣的是根据该列或其他列 在同一个表中 的值 数字 将不同的颜色作为单元格背景 类似于我们在 Excel 条件格式 gt 色阶 gt 红黄绿中的内容 我想在通过
  • 打开 md-calendar 时滚动到当前日期

    目前正在构建一个使用 Angular Material 的应用程序 我们需要一个 md calendar 组件 我们想要自定义按钮样式和内容 因此不使用普通的 md datepicker 问题是 当 md calender 打开时 滚动位置
  • 在鼠标光标位置添加 cytoscape 节点

    我想在画布上的单击事件上的鼠标箭头位置添加一个 cytoscape 节点 我怎样才能做到这一点 我的方法 效果不太好 我可以通过单击创建一个节点 但无法确保创建的节点的位置位于我单击的位置 使用这样的东西 cy click function
  • 无法实例化模块 [$injector:unpr] 未知提供程序:$routeProvider

    我从 AngularJS 升级时收到此错误1 0 7 to 1 2 0rc1 ngRoute 模块不再是核心的一部分angular js文件 如果您继续使用 routeProvider 那么您现在需要包括angular route js在你
  • 使用文件 API 将资源加载到 Three.js 中

    我想创建导入 3D 模型以在浏览器中查看的功能 方法是使用File API http www html5rocks com en tutorials file dndfiles Three js 加载器在我托管的文件上运行良好 我的理解是加
  • 通过JS Laravel访问存储目录

    有没有办法访问storage目录 该目录已经链接到publicJS 中的目录 我正在尝试制作一个上传图片的表单 验证脚本 if request gt hasFile photos marker gt photos request gt ph
  • 判断一个数字是否能被 3 或 5 整除 (FizzBu​​zz)

    如何根据输出是否能被 3 或 5 整除来更改输出 如果它能被 3 整除 我想显示 rock 如果它能被 5 整除 我想显示 star 类似于 FizzBu zz 如果两者都有 他们都会看到 这是我的代码 if var n Math floo
  • console.log() 显示同一对象属性的矛盾值

    我想我可能要疯了 我使用 console log 来查看对象的状态 然后在下一行对同一对象的特定属性执行 console log 并为每个属性获取不同的值 我正在使用的代码是 console log this pictures Items
  • 为什么将 x 和 y 设置为 0 时 svg 文本会消失?

    我刚刚开始阅读有关svg我提出了以下问题 我正在创建一个简单的svg with a text里面如下图所示 从我的阅读中我了解到x and y of the text标签声明文本在标签内的位置svg space 为什么当我同时设置x and
  • 在 React Navigation 中将 props 传递给自定义抽屉导航器

    在反应导航抽屉菜单中 我想显示用户名 John Doe 它处于我的主要组件的状态 Router 我怎样才能将自定义抽屉内容组件传递给它 额外信息 我从 AsyncStorage 中获取此名称 组件已挂载 这是我的代码 export defa
  • 获取点击的的DOM路径

    HTML div class lol a class rightArrow href a div 伪代码 rightArrow click function rightArrowParents this dom dom is the pse
  • 如何打开弹出窗口并用父窗口中的数据填充它?

    如何使用 JavaScript jQuery 使用父页面中 JS 变量的数据填充弹出窗口 在我的示例中 我有一个文件名数组 我在父窗口中最多列出五个 如果还有更多 我想提供一个链接来打开弹出窗口并列出数组中的每个帖子 因此 如果我打开一个包
  • JavaScript 数组扩展语法的时间复杂度是多少?

    我想知道在 JavaScript 中使用数组扩展的时间复杂度是多少 是线性 O n 还是常数 O 1 下面的语法示例 let lar Math max nums 传播称为 Symbol iterator 有关对象的属性 对于数组 这将迭代数
  • Firebase 警告:使用 Firebase Cloud Function 搜索数据时使用未指定的索引

    我构建了一个 Firebase 云函数 用于查找 IsNotificationEnabled 值等于 true 的用户 我的部分职能 export const sendPushNotification functions https onR
  • useParams 钩子在 React 功能组件中返回未定义

    该应用程序显示所有照片

随机推荐

  • 数据库修改删除的操作

    创建一个school数据库 创建学生表 学号int 登录密码 varchar 20 姓名 性别varchar 2 出生日期 datatime 家庭住址 email 注意事项 1 使用英文 表的名称和字段尽量使用 括起来 2 auto inc
  • 内点法求最优潮流和微电网调度(风、光、蓄电池、燃油机)(Matlab实现)

    目录 1 概述 2 案例 2 1算例描述 2 2 数据 3 一点小知识 4 Matlab代码实现 1 概述 由于电力系统本身的复杂性 电力潮流优化具有规模大 约束条件多和非线性的特点 通过对最优潮流的求解 最终达到优化已有资源 降低发电厂耗
  • 私有IP地址

    什么是私有IP地址呢 私有IP是主要用于在局域网中分配的 私有IP的主要范围有如下 私有 内网 IP地址范围 A类 10 0 0 0 10 255 255 255 B类 172 16 0 0 172 31 255 255 C类 192 16
  • 在SAE部署WordPress

    虽然几个月前我是以安装应用的形式将wordpress部署在sae 虽然当时sae应用商店还没有收费 但是作为一个开发者 不喜欢这种方式来搭建自己的博客 因为搭建自己的博客 自己什么事情都没有干 可能另外一个原因吧 应用达到一定的访问量 我们
  • 使用LDO进行电压转换,24V转5V电路为什么中间要加一个中间电压做转化

    问题 我的输入是24v 输出是5V 有两个方案 方案一 使用LM7805直接从24V转5V 假如后面的负载电流是100ma 那么LM7805上的发热功率就是W 19 0 1w 1 9w 方案二 先使用LM7815从24V转15V 然后从15
  • python — 项目命名规范

    python 项目命名规范 类型 公有 外部成员 私有 内部成员 项目 project My project 模块 module my naming convention my naming convention 包 package my
  • 逆序和 (最小反转数)【归并排序解决】

    算法竞赛 file author jUicE g2R qq 3406291309 彬 bin 必应 一个某双流一大学通信与信息专业大二在读 brief 一直在算法竞赛学习的路上 copyright 2023 9 COPYRIGHT 原创技术
  • 【Java入门杂记】【六】

    文章目录 返回值类型练习 返回数组 返回类型 参数列表 参数 多int 返回值 单int 形参 实参练习 参数 arr 返回值 int 参数 对象 返回值 多类型 对象数组 方法 重载方法 不构成重载方法 构造方法 面向对象 封装 继承 多
  • Host********* is not allowed to connect to this MySQL server 解决方法

    1 use mysql 2 update user set host where user root 3 FLUSH PRIVILEGES
  • 性能测试知识及古老测试工具LR

    目录 性能理论知识 LR基本知识点 1 LR工作原理 2 LR脚本支持的语言有 3 LR的四大组件 4 Vugen的选项 5 事务的响应时间查看 6 性能测试目的 7 常见单词 LR性能问题 1 请简述性能测试的过程 2 请写出基准测试的两
  • TCP/IP协议-应用层协议端口号及各层协议数据单元

    序言 重新复习一下常见应用层协议端口号 以及TCP IP各层数据单元 1 应用层协议端口号对应 基于TCP的应用层协议 应用层协议 服务 端口号 TCP UDP FTP 文件传输协议 20 数据 21 控制 TCP SSH 安全登录 文件传
  • kubernetes运行应用2之DaemonSet详解

    Python微信订餐小程序课程视频 https edu csdn net course detail 36074 Python实战量化交易理财系统 https edu csdn net course detail 35475目录 查看dae
  • java哈希表,java哈希表常用方法

    Java中的哈希表是一种用于存储键值对的数据结构 它通过使用一个哈希函数 能够实现快速查找 插入 删除的操作 本文将详细解读Java哈希表的运作机制 并介绍其常用方法及使用方式 一 Java哈希表的基本概念 Java哈希表 即HashTab
  • Three.js 实现透明背景

    例如中间放一个模型 背景透明通过相机可以看到现实环境 类似AR展示的效果 1 Renderer渲染器设置 renderer new THREE WebGLRenderer 抗锯齿属性 WebGLRenderer常用的一个属性 antiali
  • vue去除浏览器自带padding、margin

    浏览器自带padding margin
  • echarts地图中如何使用图片填充地图,类似于给地图添加纹理效果

    旧版本的echarts地图中的areaColor属性可以使用图片
  • js正则exec match测试验证

  • Linux三剑客awk、grep、sed详解

    一 前言 linux 有很多工具可以做文本处理 例如 sort cut split join paste comm uniq column rev tac tr nl pr head tail 学习 linux 文本处理的懒惰方式 不是最好
  • H.264 入门篇 - 00 (简介)

    目录 1 Profiles 2 应用领域 3 Level 4 层次结构 4 0 整个过程 4 1 数据切分 4 1 1 Macroblock 宏块 4 2 帧内预测 Intra Frame Prediction 4 3 帧间预测 Inter
  • react之ref

    ref在react中是一个对象 它有一个current属性 可以对这个属性进行操作 用于获取DOM元素和保存变化的值 常用的案例是input标签来展示和实践 推荐方法 在函数式组件中调用useRef 函数和在类组件中调用createRef