React 进阶特性

1. ref

ref 是 React 提供的一种机制,用于访问和操作 DOM 元素或 React 组件的实例。它可以用于获取某个 DOM 元素的引用,从而执行一些需要直接操作 DOM 的任务,例如手动设置焦点、选择文本或触发动画。

1.1. 使用 ref 的步骤

1. 创建一个 ref:使用 React.createRef 或 useRef Hook 创建一个 ref;

2. 将 ref 传递给 React 元素:将 ref 赋值给 React 元素的 ref 属性;

3. 访问 ref:通过 ref.current 访问元素或组件实例;

1.2. 示例

import React, { useRef, useEffect } from 'react';function TextInput() {const inputRef = useRef(null);useEffect(() => {// 组件挂载后,input 元素获取焦点inputRef.current.focus();}, []);return <input ref={inputRef} type="text" />
}export default TextInput;

1.3. ref 的函数形式

ref 可以直接赋值或通过函数进行赋值,在早期,ref 还支持传递字符串,但是新版本已经不再推荐这种写法。

import React, { useRef, useEffect } from 'react';function TextInput() {const inputRef = useRef(null);useEffect(() => {// 组件挂载后,input 元素获取焦点inputRef.current.focus();}, []);return <input ref={node => inputRef.current = node} type="text" />
}export default TextInput;

2. forwardRef

forwardRef 是一个用于转发 ref 到子组件的方式,它允许父组件访问子组件的 DOM 节点或组件实例。它常用于封装第三方 UI 库组件或实现高阶组件。

注意:React19 弃用改用 props 传值。

2.1. 使用 forwardRef

1. 定义一个函数组件:使用 React.forwardRef 包裹函数组件,使其能够接收 ref;

2. 转发 ref:在组件内部,将 ref 传递给某个子组件或 DOM 元素;

2.2. 示例

import React, { forwardRef } from 'react';const FancyButton = forwardRef((props, ref) => (<button ref={ref} className="fancy-button">{props.children}</button>
));function App() {const buttonRef = useRef(null);useEffect(() => {console.log(buttonRef.current); // 输出 <button> 元素}, []);return <FancyButton ref={buttonRef}>Click me</FancyButton>;
}export default App;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/bicheng/84381.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于PHP的连锁酒店管理系统

有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发&#xff0c;数据库mysql&#xff0c;前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…

【大厂机试题解法笔记】报文响应时间

题目 IGMP 协议中&#xff0c;有一个字段称作最大响应时间 (Max Response Time) &#xff0c;HOST收到查询报文&#xff0c;解折出 MaxResponseTime 字段后&#xff0c;需要在 (0&#xff0c;MaxResponseTime] 时间 (s) 内选取随机时间回应一个响应报文&#xff0c;如果在随机…

逻辑回归暴力训练预测金融欺诈

简述 「使用逻辑回归暴力预测金融欺诈&#xff0c;并不断增加特征维度持续测试」的做法&#xff0c;体现了一种逐步建模与迭代验证的实验思路&#xff0c;在金融欺诈检测中非常有价值&#xff0c;本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…

Python爬虫实战:研究demiurge框架相关技术

1. 引言 在当今数字化时代,互联网上蕴含着海量的有价值信息。爬虫技术作为获取这些信息的重要手段,被广泛应用于学术研究、商业分析、舆情监测等多个领域。然而,构建一个高效、稳定且可维护的爬虫系统面临诸多挑战,如网页结构复杂多变、反爬机制日益严格、数据处理流程繁琐…

Jenkins | Jenkins构建成功服务进程关闭问题

Jenkins构建成功服务进程关闭问题 1. 原因2. 解决 1. 原因 Jenkins 默认会在构建结束时终止所有由构建任务启动的子进程&#xff0c;即使使用了nohup或后台运行符号&。 2. 解决 在启动脚本中加上 BULID_IDdontkillme #--------------解决jenkins 自动关闭进程问题-----…

深度学习习题2

1.如果增加神经网络的宽度&#xff0c;精确度会增加到一个特定阈值后&#xff0c;便开始降低。造成这一现象的可能原因是什么&#xff1f; A、即使增加卷积核的数量&#xff0c;只有少部分的核会被用作预测 B、当卷积核数量增加时&#xff0c;神经网络的预测能力会降低 C、当卷…

猜字符位置游戏-position gasses

import java.util.*;public class Main {/*字符猜位置游戏;每次提交只能被告知答对几个位置;根据提示答对的位置数推测出每个字符对应的正确位置;*/public static void main(String[] args) {char startChar A;int gameLength 8;List<String> ballList new ArrayList&…

解析两阶段提交与三阶段提交的核心差异及MySQL实现方案

引言 在分布式系统的事务处理中&#xff0c;如何保障跨节点数据操作的一致性始终是核心挑战。经典的两阶段提交协议&#xff08;2PC&#xff09;通过准备阶段与提交阶段的协调机制&#xff0c;以同步决策模式确保事务原子性。其改进版本三阶段提交协议&#xff08;3PC&#xf…

Towards Open World Object Detection概述(论文)

论文&#xff1a;https://arxiv.org/abs/2103.02603 代码&#xff1a;https://github.com/JosephKJ/OWOD Towards Open World Object Detection 迈向开放世界目标检测 Abstract 摘要 Humans have a natural instinct to identify unknown object instances in their environ…

QT3D学习笔记——圆台、圆锥

类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体&#xff08;对象或容器&#xff09;QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质&#xff08;定义颜色、反光等&#xff09;QFirstPersonC…

CSS | transition 和 transform的用处和区别

省流总结&#xff1a; transform用于变换/变形&#xff0c;transition是动画控制器 transform 用来对元素进行变形&#xff0c;常见的操作如下&#xff0c;它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…

夏普比率(Sharpe ratio)​

具有投资常识的人都明白&#xff0c;投资光看收益是不够的&#xff0c;还要看承受的风险&#xff0c;也就是收益风险比。 夏普比率描述的正是这个概念&#xff0c;即每承受一单位的总风险&#xff0c;会产生多少超额的报酬。 用数学公式描述就是&#xff1a; 其中&#xff1…

C#学习第29天:表达式树(Expression Trees)

目录 什么是表达式树&#xff1f; 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持&#xff1a; 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…

计算机网络备忘录

计算机网络 - 网络互联与互联网 计算机网络重点学习本章&#xff0c;属于核心知识 包含网络层和传输层 的 相关协议 计算机网络层次重点掌握网络层与传输层。其中网络层主要是IP协议&#xff0c;解决主机-主机通信&#xff0c;传输层主要是TCP/UDP 协议&#xff0c;解决应用-…

跨界破局者鲁力:用思辨与创新重塑汽车流通行业标杆

来源&#xff1a;投资家 在汽车流通行业深度变革的浪潮中&#xff0c;东莞东风南方汽车销售服务有限公司塘厦分公司总经理鲁力历经近二十年行业深耕&#xff0c;构建了一条从汽车销售顾问到区域运营掌舵者的进阶范本。作为东风日产体系内兼具理论建构与实战穿透力的标杆管理者…

玄机-日志分析-IIS日志分析

1.phpstudy-2018站点日志.(.log文件)所在路径&#xff0c;提供绝对路径 2.系统web日志中状态码为200请求的数量是多少 3.系统web日志中出现了多少种请求方法 4.存在文件上传漏洞的路径是什么(flag{/xxxxx/xxxxx/xxxxxx.xxx} 5.攻击者上传并且利用成功的webshell的文件名是什…

微信小程序开发知识点

1. 微信小程序开发知识点 1.1. 公共引用 1.1.1. 公共 wxss 在app.wxss文件下写入组件样式&#xff0c;也可使用import方式应用单独公共样式&#xff0c;避免了每个页面单独引用。 import "./public/wxss/base.wxss";1.1.2. 公共组件 在app.json文件下写入组件&…

安卓基础(编译.Class)

方法安全性维护性开源友好度删除.java用.class❌ 极低❌ 差❌代码混淆 (ProGuard)✅ 中等✅ 易✅AAR 库模块✅ 高✅ 易✅ 对于.class 步骤 1&#xff1a;编译生成 .class 文件 ​​打开终端​​&#xff08;Android Studio 底部的 Terminal 标签页&#xff09; 导航到你的模块…

golang常用库之-go-feature-flag库(特性开关(Feature Flags))

文章目录 golang常用库之-go-feature-flag库&#xff08;特性开关&#xff08;Feature Flags&#xff09;&#xff09;一、什么是特性开关&#xff08;Feature Flags&#xff09;二、go-feature-flag库我可以使用 GO Feature Flag 做什么&#xff1f;选择使用 Open Feature SDK…

微前端 - Module Federation使用完整示例

Angular 框架中 项目结构 main-app/src/app/app.module.tsapp.component.ts micro-app/src/app/app.module.tsapp.component.ts主应用配置 安装必要依赖&#xff1a; ng add angular-architects/module-federation修改 webpack.config.js&#xff1a; const { share, Shar…