useId

useId 是 React 18 引入的一个内置 Hook,用于生成唯一且稳定的 ID

主要用于,解决在客户端和服务器端渲染(SSR)时,动态生成 ID 可能导致的冲突问题;

特别适合用于,需要关联 HTML 元素(如:


useId 的注意事项

  • 不要在循环或条件语句内调用:
    useId 必须在组件的顶层调用,否则可能导致不一致的 ID。

  • 不要用于 key 属性(除非组合使用)
    useId 生成的 ID 通常较短,不适合直接作为 key(除非结合其他唯一值)。

  • 与 useRef 或 useState 不同:
    useId 不触发重新渲染,也不存储数据,仅用于生成唯一标识。


场景

  • <label htmlFor="input-id"> 和 <input id="input-id"> 的关联

  • 在列表中为每个项生成唯一标识(如:key 属性)

  • 在无障碍(a11y)场景下,需要唯一标识关联元素

基本用法

import { useId } from 'react'function FormField() {const id = useId()  // 生成唯一 ID,如 ":r1:"return (<div><label htmlFor={id}> Username: </label><input id={id} type="text" /></div>)
}useId() 返回一个唯一的字符串(如 ":r1:"":r2:")。每次调用 useId() 都会生成一个新的唯一 ID。生成的 ID 在客户端和服务器端一致,不会导致 hydration 错误。

关联 label 和 input

function LoginForm() {const usernameId = useId()const passwordId = useId()return (<form><div><label htmlFor={usernameId}> Username: </label><input id={usernameId} type="text" /></div><div><label htmlFor={passwordId}> Password: </label><input id={passwordId} type="password" /></div></form>)
}

生成列表项的唯一 key

function TodoList({ items }) {return (<ul>{items.map((item) => {const id = useId()  // ❌ 错误!不能在循环内调用 useIdreturn <li key={id}> {item.text} </li>})}</ul>)
}`注意`:useId 不能 在'循环''条件语句内'调用,因为它依赖于 React 的渲染顺序。
正确的做法是:function TodoList({ items }) {const baseId = useId()  // 在组件顶层调用return (<ul>{items.map((item, index) => (<li key={`${baseId}-${index}`}>{item.text}</li>))}</ul>)
}

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

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

相关文章

排水管网实时监测筑牢城市安全防线

排水管网的实时监测工作&#xff0c;强调其对于保障城市安全的重要作用。“排水管网”明确了具体的关注对象&#xff0c;它是城市基础设施的重要组成部分&#xff0c;承担着雨水、污水排放等关键功能。“实时监测”突出了监测的及时性和持续性&#xff0c;意味着能够随时获取排…

SZU大学物理实验报告|电位差计

写在前面&#xff1a;博文里放图片&#xff0c;主要省去了对文档的排版时间&#xff0c;实验还是要自己做的&#xff0c;反正都要去实验室上课&#xff0c;顺带锻炼下动手能力。有些结果是实验手写的&#xff0c;所以看不到&#xff0c;有结果的可以对下结果差的不太多就行&…

RoPE简单解析

文章目录简介拆解一些tricks简介 因为RoPE的优异性能&#xff0c;其已成为各种大模型中位置编码的首选&#xff0c;包括多模态模型&#xff1b;在一些多模态模型或视频理解模型中&#xff0c;甚至会用到多维度RoPE。虽然RoPE已广泛应用&#xff0c;之前也看了不少针对其原理解…

windows 获取 APK 文件的包名和启动 Activity 名称

使用 aapt 命令确保环境变量配置正确&#xff1a;首先需要确保你的系统环境变量中包含了 Android SDK 的 build-tools 目录路径。这是因为 aapt 工具位于该目录下。运行命令&#xff1a; 打开命令提示符&#xff08;CMD&#xff09;&#xff0c;然后输入以下命令来查看 APK 的详…

【Mac版】Linux 入门命令行快捷键+联想记忆

Linux Mac 用户终端命令行快捷键 符号速查全解作为一个刚接触 Linux 和终端的 macOS 用户&#xff0c;常常被命令行的各种快捷键和符号弄得头晕脑胀&#xff0c;本文将带你系统地掌握命令行中最常用的快捷键和符号&#xff0c;并通过逻辑联想帮助你轻松记住每一个组合。一、基…

AUTOSAR Mcal Dio - 模块介绍 + EB配置工具介绍

文章目录1. 模块简介2. 主要功能3. 缩略语4. API接口5. 功能介绍5.1. ChannelGroup5.2. Dio_MaskedWritePort6. 序列图6.1.读GPIO电平6.2. 设置GPIO电平7. EB 工具配置7.1.General7.2.DioPort8. 参考资料1. 模块简介 Dio&#xff0c;全称“Digital Input Output”。Dio模块&am…

ICT模拟零件测试方法--晶体管测试

ICT模拟零件测试方法–晶体管测试 文章目录ICT模拟零件测试方法--晶体管测试晶体管测试晶体管测试配置晶体管测试配置晶体管测量选项晶体管测试 i3070 在线测试软件为每个晶体管提供两种测试&#xff1a; 使用二极管测试对晶体管的两个 PN 结进行测试。这是检查设备存在的快速…

AI算法实现解析-C++实例

基于C++实现的AI 以下是基于C++实现的AI/机器学习相关示例,涵盖基础算法、计算机视觉、自然语言处理等领域,适合不同阶段的学习者参考: 基础机器学习算法 线性回归 使用梯度下降法预测连续值,核心公式: 损失函数: 逻辑回归 二分类问题实现,Sigmoid函数: K-Means…

亚马逊云科技实战架构:构建可扩展、高效率、无服务器应用

对于今天的开发者、架构师和技术爱好者而言&#xff0c;云计算早已超越了简单的“虚拟机租赁”或“服务器托管”阶段。它已经演化为一套丰富、强大且精密的工具集&#xff0c;能够以前所未有的方式设计、部署和扩展应用程序。真正的云原生思维&#xff0c;是掌握并运用多种架构…

论文阅读:《无约束多目标优化的遗传算法,群体和进化计算》

前言 提醒&#xff1a; 文章内容为方便作者自己后日复习与查阅而进行的书写与发布&#xff0c;其中引用内容都会使用链接表明出处&#xff08;如有侵权问题&#xff0c;请及时联系&#xff09;。 其中内容多为一次书写&#xff0c;缺少检查与订正&#xff0c;如有问题或其他拓展…

嵌入式单片机中位带操作控制与实现

STM32 单片机的SRAM有两个区支持位带(bit-band)操作。 那么,什么是位带,位带操作的原理是怎样的呢? 今天来梳理一下这个知识点。 在介绍位带操作之前,先看一看 ARM Crotext-M3 的存储器映射。 CM3 的地址空间是 4GB, 程序可以在代码区,内部 SRAM 区以及外部 RAM 区中执…

考研初试专业分146!上岸新疆大学!信号与系统考研经验,通信考研小马哥。

信号与系统专业课分数146&#xff0c;希望以下的经验能够帮助到正在努力学习的学弟学妹们更好的学习专业课。本人是从四月份开始学习专业课&#xff0c;当时我觉得专业课应该要尽早开始越拖到后期学习压力越大&#xff0c;所以在周边同学还在只学习公共课的时候我就开始了专业课…

负载均衡算法中的加权随机算法

import org.apache.commons.lang3.tuple.Pair;import java.util.Arrays; import java.util.List; import java.util.concurrent.ThreadLocalRandom; import java.util.stream.Collectors;/*** 加权随机,nacos*/ public class RouterWeightRandom {/**** param list [{"a&q…

AI时代SEO关键词优化策略

内容概要 在人工智能&#xff08;AI&#xff09;技术深度融入数字营销的背景下&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;的关键词优化策略正经历一场智能变革&#xff0c;这不仅重塑了传统研究方式&#xff0c;还为企业带来了全新的竞争机遇。本文将从AI时代SEO的变…

复矩阵与共轭转置矩阵乘积及其平方根矩阵

设 是一个 的复数矩阵&#xff0c;其共轭转置矩阵&#xff08;Hermitian 共轭&#xff09;记为 &#xff08;即 &#xff09;&#xff0c;则矩阵 &#xff08; &#xff09;和 &#xff08; &#xff09;的性质如下文所述。1. Hermitian 性&#xff08;自共轭性&#x…

Vue 框架 学习笔记

作为初学者对于Vue框架的学习笔记 总结了Vue框架的核心知识点&#xff0c;包括&#xff1a;1. 基础概念&#xff1a;渐进式框架、两种使用方式、Vue实例创建流程、模板语法和响应式特性。2. 常用指令&#xff1a;详细介绍了v-html、v-show/v-if、v-for、v-on、v-bind、v-model等…

飞牛系统安装DataEase自定义Docker包

飞牛系统安装DataEase自定义Docker包背景构造DataEase Docker包1.在Linux 系统中&#xff08;比如我这里选麒麟V10&#xff09;安装Docker2.准备打包文件3.执行打包4.验证打好的包上传DataEase Docker包1.把本地docker 容器导出1.1查看镜像列表命令&#xff1a;docker images1.…

可配置的PWM外设模块

&#x1f527; 可配置的PWM外设模块 基于FPGA的PWM信号发生器&#xff0c;支持 动态周期与占空比配置&#xff0c;无需外部控制信号&#xff0c;适用于 LED 呼吸灯、舵机控制、电机驱动等场景。 仿真波形 参数修改后会晚一个pwm周期才生效&#x1f4cc; 模块功能 &#x1f9ee;…

从零到一:我是如何用深度学习打造高性能书籍推荐系统的

作者&#xff1a;笙囧同学 | 发布时间&#xff1a;2025年7月28日 | 阅读时长&#xff1a;15分钟 &#x1f3af; 前言&#xff1a;为什么要做这个项目&#xff1f; 大家好&#xff0c;我是笙囧同学&#xff01;最近在学习《机器学习基础》课程时&#xff0c;被推荐系统的魅力深…

OpenRLHF:面向超大语言模型的高性能RLHF训练框架

“四模型协同调度破资源壁垒&#xff0c;让70B模型RLHF训练触手可及” OpenRLHF 是由 OpenLLMAI 团队于2024年推出的开源强化学习人类反馈&#xff08;RLHF&#xff09;框架&#xff0c;旨在解决大语言模型&#xff08;LLM&#xff09;对齐训练中的多模型协调瓶颈与超大规模扩展…