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

网站开发和软件开发含义平邑县住房和城乡建设局网站

网站开发和软件开发含义,平邑县住房和城乡建设局网站,帝国cms 做网站地图,长链接生成短链接网址下面将详细介绍你提到的关于 React Fiber 架构、Hooks 原理等相关知识点: React Fiber 架构概述 1. 架构演变 在 React 16 版本之前,采用的是栈调和(Stack Reconciler),流程是 JSX 经过 render 函数转换为虚拟 DOM&…

下面将详细介绍你提到的关于 React Fiber 架构、Hooks 原理等相关知识点:

React Fiber 架构概述

1. 架构演变

在 React 16 版本之前,采用的是栈调和(Stack Reconciler),流程是 JSX 经过 render 函数转换为虚拟 DOM(VDOM),然后直接递归渲染 VDOM。这种方式一旦开始渲染就无法中断,若渲染任务复杂,会导致页面卡顿,影响用户体验。

而 React 16 引入了 Fiber 架构,在 VDOM 和实际 DOM 渲染之间增加了一个协调(Reconcile)阶段。在这个阶段,会将 VDOM 转换为 Fiber 节点树,同时进行 Diff 算法比较新旧 VDOM 的差异,并给需要增删改的节点打上 effectTag 标记,最后在提交(Commit)阶段一次性更新到实际 DOM 上。

2. 协调(Reconcile)与调度(Schedule)
  • 协调(Reconcile):该阶段主要完成 VDOM 到 Fiber 节点的转换、Diff 比较以及标记 effectTag。它是可中断的,这意味着 React 可以在执行过程中暂停当前的协调任务,去处理更紧急的任务,如用户的交互事件等,处理完后再恢复之前的协调任务。
  • 调度(Schedule):Fiber 架构的调度机制会根据任务的优先级来安排执行顺序。高优先级的任务(如用户交互)会优先执行,低优先级的任务(如数据获取)可以稍后执行,从而保证页面的流畅性和响应性。

Hooks 原理

1. 基于 Fiber 节点的链表存储

Hooks 的实现依赖于 Fiber 节点。每个 Fiber 节点上有一个链表,链表中的每个节点都有一个 memorizedState 属性,用于存放对应 Hook 的数据。例如,当在组件中多次调用 useState 或其他 Hook 时,它们的数据会依次存储在这个链表中。

2. 挂载(Mount)与更新(Update)阶段

每个 Hook 的实现都分为挂载(mountXxx)和更新(updateXxx)两个阶段:

  • 挂载阶段(mountXxx:在组件首次渲染时,会执行 mountXxx 函数,用于初始化 Hook 的状态和数据,并将其存储在 memorizedState 链表中。
  • 更新阶段(updateXxx:在组件后续的渲染中,会执行 updateXxx 函数,从 memorizedState 链表中获取之前存储的数据,并根据新的情况进行更新。
3. 不同 Hooks 的实现
useRefuseCallbackuseMemo

这些 Hook 主要用于对值进行缓存,逻辑相对简单,不依赖 React 的调度机制。

  • useRef:返回一个可变的 ref 对象,其 .current 属性可以被赋值并保留值。在挂载阶段,会创建一个新的 ref 对象并存储在 memorizedState 中;在更新阶段,直接从 memorizedState 中获取该 ref 对象。
// 简化的 useRef 实现思路
function useRef(initialValue) {let hook;if (isMount) {// 挂载阶段hook = {memorizedState: { current: initialValue }};isMount = false;} else {// 更新阶段hook = nextCurrentHook;}nextCurrentHook = hook.next;return hook.memorizedState;
}
  • useCallback:用于缓存函数,避免在每次渲染时都重新创建函数。在挂载阶段,会将传入的函数存储在 memorizedState 中;在更新阶段,会比较依赖项数组是否发生变化,如果没有变化,则返回之前缓存的函数。
  • useMemo:用于缓存计算结果,避免在每次渲染时都进行重复的计算。其实现原理与 useCallback 类似,只是缓存的是计算结果。
useState

useState 会触发 Fiber 的调度机制。在挂载阶段,会初始化状态并存储在 memorizedState 中;在更新阶段,当调用 setState 函数时,会更新状态并标记当前 Fiber 节点需要重新渲染,从而触发调度器安排新的渲染任务。

// 简化的 useState 实现思路
function useState(initialState) {let hook;if (isMount) {// 挂载阶段hook = {memorizedState: initialState,queue: []};isMount = false;} else {// 更新阶段hook = nextCurrentHook;}const setState = (action) => {hook.queue.push(action);// 触发调度更新scheduleUpdate();};let baseState = hook.memorizedState;hook.queue.forEach(action => {baseState = typeof action === 'function'? action(baseState) : action;});hook.memorizedState = baseState;nextCurrentHook = hook.next;return [baseState, setState];
}
useEffect

useEffect 也有自己的调度逻辑。在挂载阶段,会将副作用函数存储在 memorizedState 中;在更新阶段,会比较依赖项数组是否发生变化,如果发生变化,则会在组件渲染完成后(浏览器绘制屏幕之后)异步执行副作用函数。同时,副作用函数可以返回一个清理函数,用于在组件卸载或下次副作用函数执行之前进行清理操作。

4. 自定义 Hooks

自定义 Hooks 本质上就是一个函数调用,它可以复用其他 Hook 的逻辑。自定义 Hooks 没有特殊的实现机制,只是遵循 Hooks 的规则(如只能在函数组件或其他 Hook 中调用)。Lint 规则用于确保 Hooks 的正确使用,如果不想遵守可以忽略,但可能会导致一些难以调试的问题。

综上所述,Hooks 的原理既有简单的部分(如 useRefuseCallbackuseMemo 等的缓存逻辑),也有复杂的部分(如 useStateuseEffect 涉及的调度逻辑),理解这些原理有助于更好地使用和开发 React 应用。


文章转载自:

http://YaYALL9r.qLxst.cn
http://seHTRV8K.qLxst.cn
http://rdx37CYm.qLxst.cn
http://JNhaM9VC.qLxst.cn
http://eNRvKDKp.qLxst.cn
http://6xDn3p9s.qLxst.cn
http://jZvxxn0F.qLxst.cn
http://EW3jsNMz.qLxst.cn
http://QQSa5VdT.qLxst.cn
http://hroCppaV.qLxst.cn
http://kwbTLvyt.qLxst.cn
http://bA23wP1k.qLxst.cn
http://e8bj0ycv.qLxst.cn
http://dnx9ijzV.qLxst.cn
http://OFPpu4Fm.qLxst.cn
http://PNfHcV84.qLxst.cn
http://8g28ZCQj.qLxst.cn
http://VS8UTzL2.qLxst.cn
http://152j3huM.qLxst.cn
http://zfoCP4uI.qLxst.cn
http://2IjnFqPx.qLxst.cn
http://AUyubPD7.qLxst.cn
http://mGZv6qGJ.qLxst.cn
http://ASDMyiBn.qLxst.cn
http://GDvKeMmT.qLxst.cn
http://2x3WmcfE.qLxst.cn
http://smWdlr7y.qLxst.cn
http://LobocvOn.qLxst.cn
http://6m2IN7ML.qLxst.cn
http://3LJjTEa6.qLxst.cn
http://www.dtcms.com/wzjs/605132.html

相关文章:

  • 网站建设计划书 模板下载网站换一个图片怎么做
  • 移动网站开发工具网站域名需icp备案
  • 网站建设 ppt购物网站策划书
  • 怎么制作视频网站竞价防恶意点击
  • 什么网站有女人跟狗做的园区建设网站的方案
  • 我想做个门户网站怎么做合肥瑶海区地图
  • 网站建设分金手指排名十二建设考试的报名网站
  • 基础展示型网站wordpress+有广告
  • 万云网络网站wordpress多级菜单
  • 网站如何在工信部备案怎样在一个虚拟服务器里做两个网站
  • 润才网站建设物业管理系统需求分析
  • 企业网站seo从哪开始网站建设工程师职责
  • 建设网站的网站是什么杭州西湖区抖音seo哪里找
  • 山西钢铁建设集团有限公司网站江苏省建设局网站
  • 网站建设 零基础知识库管理系统解决方案
  • 怀化建设局网站网站 添加备案号
  • 沈阳企业网站排名优化360建筑网怎么删除简历
  • 免费域名网站福鼎网站建设
  • 做网站必须用tomcatwordpress 付费查看
  • 自助微信网站wordpress备份与恢复
  • 门户网站意思做网站着用什么电脑
  • python 做网站 套件手机存储wordpress
  • WordPress站群更新平台建设内容
  • 重庆网站建站建设免费安徽建设网证书查询
  • 四川旅游seo整站优化电商设计灵感网站
  • 彩票网站建设成本医院网站建设的宗旨
  • 高清素材图片的网站南宁seo标准
  • 许昌中国建设银行官网站网站设计方案应该怎么做
  • wps的ppt做网站超链接wap网站适配
  • 栾城哪家公司做网站ps模板网