源码分析之React中的useId

概述

在 React 中,useId() 是一个用于生成唯一标识符的 Hook

源码分析

useId()对应挂载和更新阶段的方法分别是mountIdupdateId方法,这两个方法也是一个存和取的操作。

  • mountId方法

root.identifierPrefix可以自定义,应用的入口createRoot方法的第二个参数是可选的,接受一个options对象,identifierPrefix就是它的属性之一。

js 复制代码
// 全局计数器
let globalClientIdCounter = 0;
function mountId(){
    // 获取当前hook
    const hook = mountWorkInProgressHook();
    // 获取Root
    const root = getWorkInProgressRoot();
    // 获取root上的前缀
    const identifierPrefix = root.identifierPrefix;
    let id;
    
     const globalClientId = globalClientIdCounter++;
    id = '_' + identifierPrefix + 'r_' + globalClientId.toString(32) + '_';
    // 将生成的id存到fiber的memoizedState中
    hook.meomizedState = id;
    // 返回id
    return id;
}
  • updateId方法
js 复制代码
function updateId() {
 // 获取hook
  const hook = updateWorkInProgressHook();
  // 读取hook
  const id = hook.memoizedState;
  // 返回id
  return id;
}

总结

useId hook 就是在生成一个唯一的id标识符字符串,在React内部有一个递增的计数器globalClientIdCounter,id就是计数器加上一些字符,也可以在应用入口定义前缀identifierPrefix

相关推荐
Ai_easygo2 小时前
AI Agent开发入门——从ReAct到Tool Calling,拆解Agent的底层运行逻辑
前端·人工智能·react.js
研☆香2 小时前
分析制作html页面,如何划分页面结构
前端
kyriewen3 小时前
我扒了最近的前端面经——2026年面试不背八股文了,考这5样
前端·面试·ai编程
IT_陈寒3 小时前
Redis的持久化配置把我坑惨了:你以为数据安全了?
前端·人工智能·后端
小徐_23333 小时前
uni-app 项目别再从零搭了!3 个 Wot UI 起手模板怎么选?
前端·uni-app
张元清4 小时前
React useResizeObserver Hook:追踪元素尺寸变化(2026)
javascript·react.js
赵庆明老师4 小时前
Vben精讲:16-熟悉Vite前端工具链
前端
瑞瑞小同学6 小时前
处理echarts x轴内容过多,重叠问题
前端·javascript·echarts
HexCIer6 小时前
面向未来的原子化 CSS:UnoCSS 核心架构分析与 Tailwind CSS 现状
前端·css·vite
程序员黑豆7 小时前
鸿蒙应用开发中的单位详解:px、vp、fp、lpx
前端·harmonyos