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

相关推荐
KaMeidebaby36 分钟前
卡梅德生物技术快报|PD1 单克隆抗体定制配套 N 糖全谱质控开发
前端·人工智能·算法·数据挖掘·数据分析
nuIl1 小时前
实现一个 Coding Agent(3):工具调用
前端·agent·cursor
nuIl2 小时前
实现一个 Coding Agent(4):ReAct 循环
前端·agent·cursor
nuIl2 小时前
实现一个 Coding Agent(1):一次 LLM 调用
前端·agent·cursor
nuIl2 小时前
实现一个 Coding Agent(2):让 LLM 流式响应
前端·agent·cursor
copyer_xyf2 小时前
Python 异常处理
前端·后端·python
sugar__salt2 小时前
从栈队列数据结构到JS原型面向对象全解
前端·javascript·数据结构
MageGojo2 小时前
随机文案模块怎么做?从接口封装到前端展示的完整实现思路
javascript·前端开发·api接口·后端开发·随机文案
独特的螺狮粉2 小时前
篮球集训班器具管理系统 - 鸿蒙PC Electron框架完整技术实现指南
前端·javascript·华为·electron·前端框架·开源·鸿蒙
小妖6662 小时前
js 生成随机数技巧 Math.random().toString(36)
javascript·随机数