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

相关推荐
Timer@21 分钟前
LangChain 教程 04|Agent 详解:让 AI 学会“自己干活“
javascript·人工智能·langchain
阿珊和她的猫36 分钟前
TypeScript中的never类型: 深入理解never类型的使用场景和特点
javascript·typescript·状态模式
skywalk81631 小时前
Kotti Next的tinyfrontend前端模仿Kotti 首页布局还是不太好看,感觉比Kotti差一点
前端
RopenYuan3 小时前
FastAPI -API Router的应用
前端·网络·python
走粥3 小时前
clsx和twMerge解决CSS类名冲突问题
前端·css
Purgatory0014 小时前
layui select重新渲染
前端·layui
weixin199701080164 小时前
《中国供应商商品详情页前端性能优化实战》
前端·性能优化
九皇叔叔5 小时前
003-SpringSecurity-Demo 统一响应类
java·javascript·spring·springsecurity