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

19 阅读3分钟

React基础与实践

一、React特性与简介

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

1. React特点

  • 声明式(一步步告诉需要做的事)
  • 组件化(组件交互,使用JavaScript)
  • 跨平台编写

2. React哲学

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

1)等待资源加载

  • 一次请求资源过多 ---React.Lazy
  • 网络请求慢 ---React.Suspense
  • 资源加载失败 ---ErrorBondary

2)浏览器线程执行

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

1)React更新流程

image.png

Scheduler(调度器)

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

Reconciler(协调器)

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

Renderer(渲染器)

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

image.png

3. 优缺点

优点

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

缺点

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

二、React基础知识温故知新

1. React开发Web应用

React-web

  • 架构
  • 路由
  • UI
  • 状态 image.png

React-组件

  • 数据
  • UI
  • 通信
  • 性能
    image.png

2. 组件

1)Class组件

  • 继承+构造函数
  • this
  • 生命周期
  • render image.png

2)函数式组件

  • 没有声明周期
  • 借助Hook
  • return JSX
    image.png

3)关于

image.png

函数式相较于Class的优点

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

组件和Hook的关系

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

3. Hook规则 & 原理

| 只能在最顶层使用Hook
React依靠Hook的调用顺序判断hook

| 只能在React函数中调用Hook

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

4. Hook过期闭包问题

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

5. React常见API\Hook及其作用

  • 常见API
    image.png
  • 常见Hook image.png

三、React实例

1.如何划分组件

1)Layout

image.png

2)Page

image.png

3)Component

image.png

image.png

2. 父组件给子组件通信

1)案例

  • 知道子组件的表现,直接通过props传递
  • 不知道子组件的表现,prop.children

2)代码

image.png

3. 子组件给父组件通信

1)案例

  • 传递信息比如说对象文本等,通过callback
  • 传递方法、父组件需要调用子组件的一些方法
    image.png

2)代码

image.png

4. 组件间共享信息

1)案例

image.png

2)context & reducer

image.png image.png

3)react-redux

image.png

5. 组件性能优化

1)案例

image.png

image.png

image.png

2)代码

image.png

6. 组件挂载位置

使用createPortal改变渲染位置

1)案例

image.png

image.png

2)代码

image.png

3)冒泡

image.png

image.png

image.png

7. 如何进行逻辑复用

1)useRequest案例

image.png

2)useRequest分析

image.png

3)useRequest run 代码

image.png