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

58 阅读1分钟

React基础与实践

react特点:声明式、组件化、跨平台编写

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

对应解决方案:

React.Lazy
React.Suspense
ErrorBoundary

异步更新
时间切片
React Fiber    

React-更新流程

Snipaste_2023-05-15_20-29-12.png

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

React-更新流程

Snipaste_2023-05-15_21-29-22.png

优点

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

缺点

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

用React开发

  • 打包配置:JSX -> babel -> JS

组件

class组件

  • 继承+构造函数

示例:

Snipaste_2023-05-15_21-34-59.png

函数式组件

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

Snipaste_2023-05-15_21-36-27.png

Hook规则&原理

  • 只有在最顶层使用Hook
  • 只能在React函数中调用Hook

常见API及作用

Snipaste_2023-05-15_21-39-54.png

Snipaste_2023-05-15_21-40-10.png

组件性能优化

state.name发生变化导致

  1. 重新渲染Wrapper
  2. 重新渲染Counter
  3. 重新计算calcValue

注意

  1. Count不变的场景下,Counter不能重新渲染
  2. 没有两个完全相等的函数
  3. 不变的场景下,不重新计算calcValue
  4. 一个从portal内部触发的事件会一直冒泡至包含React树的祖先,即便这些元素并不是DOM树中的祖先