源码分析之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

相关推荐
计算机魔术师9 分钟前
烧掉2780亿美元还不够?OpenAI的资本豪赌让人头皮发麻
前端
IT_陈寒1 小时前
Java线程池用错参数,我的服务居然悄悄崩溃了
前端·人工智能·后端
神秘的猪头1 小时前
React 脱围机制(二):重新理解 useEffect——它不是生命周期,而是同步外部系统
react.js
卡布鲁1 小时前
React useMemo 与 useCallback 完全指南:原理、场景与避坑
前端·react.js
碳基修炼1 小时前
排查记:本地 devServer 是 http,浏览器却把 302 重定向升级成了 https
前端·http
步行cgn2 小时前
Spring p 命名空间注入详解
java·前端·spring
何何____2 小时前
Vue 生命周期详解
前端·javascript
江米小枣tonylua2 小时前
TypeScript 全面の拥抱 !Prisma 8 + Electron 升级实战
前端
闪耀之光M782 小时前
npm命令解析
前端
咸鱼老弟2 小时前
AI Agent 的"自主性悖论"——为什么给它的自由度越大,越要配一套更硬的护栏
前端·人工智能