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

React 个人总结和理解

React 深入解析

一、核心原理

React 基于三大核心思想构建:

  1. 声明式编程:描述 UI 应该是什么样子,而不是如何一步步更新。
  2. 虚拟 DOM:用 JavaScript 对象表示真实 DOM 结构,通过 Diff 算法高效更新。
  3. 组件化:将 UI 拆分为独立、可复用的组件单元。

二、实现机制

1. Fiber 架构

Fiber 是 React 16 引入的全新协调引擎,目标是实现可中断的异步渲染任务优先级调度

核心设计:

  • 链表结构:每个 Fiber 节点都是一个链表节点,包含 childsiblingreturn 指针。
  • 双缓存机制
    • Current Tree:当前页面正在渲染的 Fiber 树。
    • WorkInProgress Tree:内存中正在构建的新 Fiber 树。
  • 更新流程
    1. 渲染阶段(可中断)
      • 遍历 Fiber 树,标记需要更新的节点。
      • 采用时间切片机制,每处理一个时间片后检查是否有更高优先级任务。
    2. 提交阶段(不可中断)
      • 将所有标记的变更一次性更新到真实 DOM。

Hooks 在 Fiber 中的存储:

  • 所有 Hooks 都存储在对应 Fiber 节点的 memoizedState 属性中。
  • Hooks 以链表形式连接,调用顺序决定了在链表中的位置。
  • 自定义 Hooks 会被拆分为基本 Hooks,按顺序添加到链表。

重要结论:

  1. Hooks 顺序必须稳定:链表结构依赖调用顺序,顺序变化会导致状态错乱。
  2. 性能优化本质
    • React.memo:防止组件不必要的重新渲染。
    • useMemo/useCallback:保持对象/函数引用稳定,避免触发子组件重新渲染。

2. 事件系统

  • 合成事件:React 封装了浏览器原生事件,提供跨浏览器一致的事件接口。
  • 事件委托:所有事件都被委托到 React 树的根节点,通过事件冒泡捕获处理。
  • 与 Vue 对比
    • Vue 直接使用原生事件,通过修饰符(如 .stop.prevent)增强。
    • Vue 的组件通信使用独立的自定义事件系统($emit)。

三、Hooks 使用详解

1. useState

  • 状态缓存:状态存储在 Fiber 节点中。
  • 批处理更新:多个 setState 调用会被合并为一次更新。
  • 函数式更新:当新状态依赖旧状态时,应使用函数形式:setCount(prev => prev + 1)
  • 浅比较:仅比较对象引用,不进行深度比较。

2. useEffect

  • 执行时机:在浏览器完成绘制后异步执行
  • 依赖数组
    • 无依赖:每次渲染后执行。
    • 空数组 []:仅首次渲染后执行。
    • 包含依赖:依赖项变化时执行。
  • 清理函数useEffect 可返回一个清理函数,在组件卸载或依赖变化前执行。

3. useContext

  • 创建上下文const UserContext = React.createContext(defaultValue)
  • 提供上下文<UserContext.Provider value={value}>
  • 消费上下文const value = useContext(UserContext)
  • 适用场景:主题、国际化等全局数据共享。

4. 其他核心 Hooks

  • useReducer:适用于复杂状态逻辑,类似于 Redux 的 reducer 模式。
  • useMemo:缓存计算结果,避免重复计算。
  • useCallback:缓存函数引用,避免子组件不必要渲染。

5. 自定义 Hooks

  • 命名规范:以 use 开头。
  • 独立状态:每个自定义 Hook 拥有独立的状态。
  • 单一职责:每个 Hook 应专注于一个特定功能。

四、高级特性

1. 代码分割

  • React.lazy():实现组件动态导入(按需加载)。
  • <Suspense>:指定加载中的降级 UI(如 loading 状态)。
  • Vue 对应defineAsyncComponent + <Suspense>

2. DOM 操作

  • Refs
    • useRef:创建可变引用,用于访问 DOM 节点或存储任意可变值。
    • 回调 Ref:获取动态 DOM 节点。
  • Portals
    • ReactDOM.createPortal:将子节点渲染到父组件 DOM 层次外的指定节点。
  • Vue 对应ref 属性 + <Teleport>

3. 并发特性(React 18+)

  • useTransition
    • 标记非紧急更新(如页面跳转、筛选)。
    • 可中断,不阻塞用户交互。
  • useDeferredValue
    • 延迟更新派生值(如搜索结果)。
    • 为耗时计算添加缓冲,保持 UI 响应。
  • Vue 对应
    • 响应式系统自动优化,无需手动标记。
    • computed + watchEffect 实现防抖优化。
  • 选择原则
    • 用户操作直接触发 → useTransition
    • 输入值派生计算 → useDeferredValue

4. 状态管理

  • Context API:内置的组件树全局状态共享方案。
  • Vue 对应provide/inject
  • 适用场景:中小型应用或无需复杂状态管理的场景。

五、总结

React 的核心优势在于其声明式、组件化的开发模式高效的虚拟 DOM 协调机制。Fiber 架构的引入使 React 能够处理更复杂的 UI 场景,并提供了并发渲染能力。Hooks 的出现让函数组件成为主流,代码组织更加灵活。

http://www.gsyq.cn/news/158417.html

相关文章:

  • Open-AutoGLM开源地址找不到?资深AI工程师亲授3种精准定位方法
  • 为什么说Open-AutoGLM的数据处理流程存在合规风险(附解决方案)
  • 【大白话数据分析】搞懂这三种神仙编码(OE/QE/LOOE) + 随机森林,模型精度直接起飞![特殊字符]
  • 国产AI手机新纪元(Open-AutoGLM硬件全解析)
  • unordered_map/set 的封装与迭代器实现 —— 从底层到上层的完美衔接
  • 求你别写死了,SpringBoot 写死的定时任务也能动态设置,爽~
  • Open-AutoGLM是否存在数据泄露隐患:3大安全挑战与应对方案详解
  • 2025年高性价比的互联网推广企业推荐,互联网推广老牌公司全解析 - mypinpai
  • Exchange 2007 属性参考指南
  • Numpy入门详细教程:核心用法一网打尽
  • Yarn Lockfile 分析与依赖管理
  • 【Php期末大作业带数据库】Php+MySQL电商商品展示平台设计与实现、电子购物商城系统(附源码)
  • 《智能体入门课》第一课|从 ChatGPT 到智能体:为什么现在人人都在谈「Agent」
  • Open-AutoGLM部署成功率提升80%,这7个关键参数设置你调对了吗
  • 【Open-AutoGLM源码下载地址曝光】:全球首发!AI自动代码生成神器核心代码免费获取
  • 大模型RAG性能优化:一文读懂7种分块策略,小白也能轻松上手!
  • 导数题三步法:目标函数破单调性难题
  • 【Open-AutoGLM使用全攻略】:从零到精通的5大核心技巧
  • 2025年口碑好的中空板行业内口碑厂家排行榜 - 行业平台推荐
  • 月薪6W不是梦!双非二本科生也能挑战这个高薪新兴领域,抓住机会就是现在!
  • TPAMI‘25 | 首个多轮、开放视角视频问答基准,系统分类9大幻觉任务
  • 天津集装箱生产源头厂家口碑炸裂,集装箱办公/箱式房/活动板房/集装箱住宿,集装箱生产厂家哪个好 - 品牌推荐师
  • 深入理解函数栈帧的创建与销毁过程
  • Java实现多类型图形验证码生成
  • 2025年西安装修设计公司推荐:这家头部企业综合评估,装修党速码! - 深度智识库
  • CMake使用案例
  • Git版本控制入门与IDEA集成实战
  • Elastic Search 聚合查询
  • DC综合与时序优化实战指南
  • JFinal中生成验证码与输出图片流