当前位置: 首页 > wzjs >正文

电子网站建设seo搜索优化公司排名

电子网站建设,seo搜索优化公司排名,做网站要多钱,网站建设与管理 宋一兵React Hooks 内部实现原理与函数组件更新机制 Hooks 的内部实现原理 React Hooks 的实现依赖于以下几个关键机制: 1. 链表结构存储 Hook 状态 React 使用单向链表来管理 Hooks 的状态。每个 Hook 节点包含: type Hook {memoizedState: any, /…

React Hooks 内部实现原理与函数组件更新机制

Hooks 的内部实现原理

React Hooks 的实现依赖于以下几个关键机制:

1. 链表结构存储 Hook 状态

React 使用单向链表来管理 Hooks 的状态。每个 Hook 节点包含:

type Hook = {memoizedState: any,      // 存储当前状态baseState: any,          // 基础状态baseQueue: Update<any, any> | null, // 基础更新队列queue: UpdateQueue<any, any> | null, // 更新队列next: Hook | null,       // 指向下一个 Hook
};

2. 当前 Hook 指针

React 内部维护一个 currentHook 指针,它会随着组件的渲染过程依次指向链表中的每个 Hook:

let currentlyRenderingFiber: Fiber | null = null;
let currentHook: Hook | null = null;
let workInProgressHook: Hook | null = null;

3. Hooks 调用顺序的重要性

Hooks 必须无条件地在组件顶层调用,这是因为 React 依赖于调用顺序来正确关联 Hook 和它的状态:

function updateFunctionComponent(fiber) {// 重置指针currentlyRenderingFiber = fiber;fiber.memoizedHooks = null;currentHook = null;workInProgressHook = null;// 执行组件函数const children = Component(props);// 渲染完成后重置currentlyRenderingFiber = null;currentHook = null;workInProgressHook = null;return children;
}

函数组件更新机制

1. 调度阶段

当状态更新时,React 会:

  1. 创建一个更新对象并加入更新队列
  2. 调度一次新的渲染(通过 scheduleUpdateOnFiber

2. 渲染阶段

在渲染阶段,React 会:

  1. 调用函数组件
  2. 按顺序执行 Hooks
  3. 返回新的 React 元素
function renderWithHooks(current, workInProgress, Component, props) {// 设置当前正在渲染的 FibercurrentlyRenderingFiber = workInProgress;// 重置 Hook 链表workInProgress.memoizedState = null;// 执行组件函数const children = Component(props);// 重置状态currentlyRenderingFiber = null;return children;
}

3. 提交阶段

在提交阶段,React 会将渲染结果应用到 DOM 上,并执行副作用(useEffect 等)。

常见 Hook 的实现原理

useState

function useState(initialState) {return useReducer(basicStateReducer,initialState);
}function basicStateReducer(state, action) {return typeof action === 'function' ? action(state) : action;
}

useEffect

function useEffect(create, deps) {const fiber = currentlyRenderingFiber;const effect = {tag: HookEffectTag, // 标识是 effectcreate,             // 副作用函数destroy: undefined,  // 清理函数deps,               // 依赖数组next: null,         // 下一个 effect};// 将 effect 添加到 fiber 的 updateQueueif (fiber.updateQueue === null) {fiber.updateQueue = { lastEffect: null };}const lastEffect = fiber.updateQueue.lastEffect;if (lastEffect === null) {fiber.updateQueue.lastEffect = effect.next = effect;} else {const firstEffect = lastEffect.next;lastEffect.next = effect;effect.next = firstEffect;fiber.updateQueue.lastEffect = effect;}
}

useMemo

function useMemo(nextCreate, deps) {const hook = mountWorkInProgressHook();const nextDeps = deps === undefined ? null : deps;const nextValue = nextCreate();hook.memoizedState = [nextValue, nextDeps];return nextValue;
}

关键点总结

  1. Hooks 依赖于调用顺序:React 使用链表结构按顺序存储 Hook 状态,因此不能在条件或循环中使用 Hooks。

  2. 双缓存技术:React 使用 current 和 workInProgress 两棵树来实现异步可中断的渲染。

  3. 闭包陷阱:函数组件每次渲染都会创建新的闭包,这解释了为什么有时候会拿到旧的 state 或 props。

  4. 批量更新:React 会合并多个状态更新,避免不必要的重复渲染。

  5. 副作用调度:useEffect 的副作用会在浏览器完成布局与绘制之后延迟执行。

理解这些原理有助于编写更高效、更可靠的 React 应用,并能更好地调试 Hook 相关的问题。

http://www.dtcms.com/wzjs/451223.html

相关文章:

  • 茶叶建设网站市场分析外贸业务推广
  • 成都网站建设前几公司郑州手机网站建设
  • 一站式网站建设seo服务商排名
  • 自建网站佛山做seo推广公司
  • 自己做的网站主页被人篡改seo系统推广
  • 做淘宝联盟网站要多少钱?百度网盘下载慢
  • 如何做购物网站的教程百度关键词怎么优化
  • 一个简单鲜花的html网页seo优化师
  • 网站建设考虑哪些因素促销方法100种
  • 做海报哪个网站好网络推广企业
  • 深色调网站三只松鼠营销策划书
  • 王烨洛阳漯河seo公司
  • 今天新闻头条新闻爱站seo工具
  • 网站建设需要那些人怎样在百度上发布作品
  • 网站开发费用可否计入无形资产百度小说搜索风云榜
  • div css 网站模板推广引流哪个软件最好
  • 重庆公司有哪些济南网站优化公司排名
  • 如何建立网站服务器国家免费职业技能培训
  • 网站seo诊断报告例子模板建站价格
  • 新汉阳火车站最新消息权威发布电子商务与网络营销教案
  • 做网站一般多钱网络营销推广8种方法
  • 图书馆网站设计方案排名nba
  • 网站初期做几个比较好肇庆网络推广
  • 中国建设银行网站首页企业成都网站建设软件
  • 宜宾微信网站建设百度企业网盘
  • 海淀做网站网络推广属于什么专业
  • 用vs2010做的网站推广发帖网站
  • 做视频的网站那几个盈利了今日热榜官网
  • 国土网站建设自查报告市场营销试题库(带答案)
  • 最新款淘宝客源码整网站程序模板+后台带自动采集商品功能带文章google 网站推广