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

101 阅读3分钟

React 特点

声明式 组件化 跨平台编写

React 哲学

React 是用 JavaScript 构建快速响应大型Web应用程序的首选方式之一。它在Facebook和Instagram上表现优秀。

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

等待资源加载

  • 一次请求太多资源 React.Lazy
  • 网络请求慢 React.Suspense
  • 资源加载失败 ErrorBoundary

浏览器线程执行

  • JS执行 异步更新
  • 浏览器计算样式布局 时间切片
  • UI绘制 React Fiber

React 更新流程

Scheduler(调度器)

  • 维护时间切片(类似requestIdleCallback)
  • 与浏览器任务调度
  • 优先级调度

Reconciler(协调器)

  • 将JSX转化为Fiber
  • Fiber树对比(双缓存)
  • 确定本次更新的Fiber

渲染器

渲染器用于管理一颗React树,使其根据底层平台进行不同的调用。

image.png

image.png

总结 优缺点

优点

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

缺点

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

用React开发web应用

架构

  • 通过定义state操作视图Mount时获取数据更新state
  • Ref保存与视图无直接关系的值
  • unMount前清空Ref

通信

  • props 父子组件通信
  • context&redux组件信息共享

UI

  • 数据决定视图
  • 通过Ref获取到DOM

性能

  • 函数使用userCallback
  • 值或者计算使用useMemo
  • 组件包裹memo

React组件

Class组件

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

image.png

函数式组件

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

image.png

函数式相比Class的优点

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

组件和Hook的关系

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

Hook规则 & 原理

只能在最顶层使用Hook

React怎么知道哪个state对应哪个useState?答案是React靠的是Hook调用的顺序。

只能在React函数中调用Hook

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

Hook过期闭包问题

在JS中,函数运行的上下文是由定义的位置决定的,当函数的闭包包住了旧的变量值时,就出现了过期闭包问题。

image.png

React常见API及作用

API作用
React.Component类组件基类extends
React.PureComponent未实现shouldComponentUpdarte(),内置了props和state浅层对比
React.memo高阶组件,仅比较props变更
React.createElement创建并返回React元素,不使用JSX场景
React.cloneElement克隆并返回新React元素,并且可以为新元素添加额外props
React.Children.[Fn]map遍历并返回;forEach仅遍历;count子组件数量;only是否只有一个子结点
React.createRef创建一个ref,并附加到具体元素上,class组件中获取dom结构常用
React.forwardRef转发ref或者与useImperativeHandler联合使用暴露方法
React.lazy实现组件动态加载
React.Suspense组件加载过程优雅降级

React 常见Hook及作用

to-do

具体场景案例

to-do