React基础与实践 | 青训营笔记

100 阅读2分钟

1. React简介与特性

React 用于构建用户界面的JavaScript库

1.1 特点

  • 声明式
  • 组件化
  • 跨平台编写

1.2 React哲学

  • React是用JavaScript构建快速响应大型Web应用程序的首选方式之一

  • 等待资源加载时间和大部分情况下浏览器单线程执行时影响web性能的两大主要原因

    等待资源加载浏览器线程执行
    React.Lazy异步更新
    React.Suspense时间切片
    ErrorBoundaryReact Fiber
  • 更新流程

    • Scheduler 调度器 * 维护时间片 * 与浏览器任务调度 * 优先级调度
    • Reconciler 协调器
      • 将JSX转化为Fiber
      • Riber树对比(双缓存)
      • 确定本次更新的Fiber
    • Renderer 渲染器
      • 渲染器用于管理一棵React树,使其根据底层平台进行不同的调用

1.3 优缺点

  • 优点

    • 快速响应:Fiber
    • 组件化:复用性强
    • 声明式编程
    • 跨平台:只需修改渲染器
  • 缺点

    • 大型应用需要配套学习 状态管理、路由工具
    • 不适合小型应用,需要用babel处理

2. React基础

2.1 用React开发web应用

  • 架构

    • 打包配置:JSX -> babel -> JS
    • 加载优化和错误降级
  • 路由

    • React Router 向应用中快速地添加视图和数据流,保持页面与URL间的同步
  • 状态

    • 多页面多组件共享信息
    • redux&context
  • UI

    • 可复用UI -> 组件 -> 页面
    • 可复用逻辑抽离成hook

2.2 组件

  • 数据
    • 通过定义state操作视图
    • Mount时获取数据更新state
    • Ref保存与视图无直接关系的值
    • unMount前清空Ref
  • 通信
    • props 父子组件通信
    • context & redux 组件信息共享
  • 性能
    • 函数使用 useCallback
    • 值或者计算使用useMemo
    • 组件包装memo
  • UI
    • 数据决定视图
    • 通过Ref获取到DOM

2.3 Class组件

  • 继承 + 构造函数
  • this
  • 生命周期
  • render方法

2.4 函数式组件

  • 没有生命周期
  • 借助Hook
  • return JSX

2.5 函数式 相较于Class的优点

  • 代码量骤减,组件清爽干净
  • 没有复杂的生命周期
  • 支持自定义hook,逻辑复用方便

2.6 组件和Hook的关系

  • 将UI拆成多个独立单元,这些单元组合可以构成多种视图展示,这些独立单元就是组件。组件相当于原子
  • hook贴近组件内部运行的各种概念逻辑,effect、state、context等。hooks更贴切于电子

2.7 Hook规则&原理

  • 只能在React函数中调用Hook
    • 在React函数组件中或自定义Hook中调用
    • 自定义Hook必须以use开头
    • Hook中的state是完全隔离的