当前位置: 首页 > news >正文

React-useRef与DOM操作

#题引:我认为跟着官方文档学习不会走歪路

ref使用

组件重新渲染时,react组件函数里的代码会重新执行,返回新的JSX,当你希望组件“记住”某些信息,但又不想让这些信息触发新的渲染时,你可以使用ref,ref 是一个普通的 JavaScript 对象,具有可以被读取和修改的current属性。

import { useRef } from 'react';
const ref = useRef(0);

useRef 返回一个这样的对象:

{ current: 0 // 你向 useRef 传入的值
}

更改 ref 不会重新渲染组件,它像一个 React 追踪不到的、用来存储组件信息的秘密“口袋”。(这就是让它成为 React 单向数据流的“脱围机制”的原因),你可以将其视为没有设置函数的常规 state 变量。

通常,当你的组件需要“跳出” React 并与外部 API 通信时,你会用到 ref ,以下是这些罕见情况中的几个:

  • 存储 timeout ID
  • 存储和操作 DOM 元素
  • 存储不需要被用来计算 JSX 的其他对象。

ref和DOM

有时你可能需要访问由 React 管理的 DOM 元素 —— 例如,让一个节点获得焦点、滚动到它或测量它的尺寸和位置。在 React 中没有内置的方法来做这些事情,所以你需要一个指向 DOM 节点的 ref 来实现。

在你的组件中使用它声明一个 ref:

const myRef = useRef(null);

将 ref 作为 ref 属性值传递给想要获取的 DOM 节点的 JSX 标签:

<div ref={myRef}>

当 React 为这个 div创建一个 DOM 节点时,React 会把对该节点的引用放入 myRef.current。然后,你可以从 事件处理器 访问此 DOM 节点,并使用在其上定义的内置浏览器 API。

// 你可以使用任意浏览器 API,例如:
myRef.current.scrollIntoView();

如果你尝试将 ref 放在你自己的组件上,例如MyInput ,默认情况下你会得到null,控制台报错,因为默认情况下,React 不允许组件访问其他组件的 DOM 节点。甚至自己的子组件也不行。这是react的安全限制。

非要使用:使用 forwardRef 并将第二个 ref 参数传递给特定节点来暴露 DOM 节点

const MyInput = forwardRef((props, ref) => {return <input {...props} ref={ref} />;
});
http://www.lryc.cn/news/488537.html

相关文章:

  • Mistral AI 发布 Pixtral Large 模型:多模态时代的开源先锋
  • Windows、Linux多系统共享蓝牙设备
  • C语言 | Leetcode C语言题解之第564题寻找最近的回文数
  • wsl虚拟机中的dockers容器访问不了物理主机
  • Spark RDD 的宽依赖和窄依赖
  • 二进制转十进制
  • 深度学习:神经网络中的非线性激活的使用
  • Python缓存:两个简单的方法
  • 原生微信小程序在顶部胶囊左侧水平设置自定义导航兼容各种手机模型
  • 经验笔记:远端仓库和本地仓库之间的连接(以Gitee为例)
  • 利用RAGflow和LM Studio建立食品法规问答系统
  • ffplay音频SDL播放处理
  • 自动化仪表故障排除法
  • WPF 中 MultiConverter ——XAML中复杂传参方式
  • 实验室管理现代化:Spring Boot技术方案
  • aws凭证(一)凭证存储
  • jmeter常用配置元件介绍总结之断言
  • JMeter监听器与压测监控之Grafana
  • MySQL8 安装教程
  • 聚焦 NLP 和生成式 AI 的创新与未来 基础前置知识点
  • 23种设计模式-访问者(Visitor)设计模式
  • ssm150旅游网站的设计与实现+jsp(论文+源码)_kaic
  • 【SKFramework框架】一、框架介绍
  • Arcgis地图实战三:自定义导航功能的实现
  • LLaMA-Factory 上手即用教程
  • 黑马点评 秒杀下单出现的问题:服务器异常---java.lang.NullPointerException: null(已解决)
  • 购物街项目TabBar的封装
  • C++游戏开发面试题及参考答案
  • 字符串的基本操作(C语言版)
  • C缺陷与陷阱 — 7 可移植性缺陷