React 概述| 青训营笔记

100 阅读5分钟

React 基础

官方资料:React

拓展资料:React技术揭秘 (iamkasong.com)

react hook: 「react进阶」一文吃透react-hooks原理 - 掘金 (juejin.cn)

字节UI:Arco Design - 企业级产品的完整设计和开发解决方案

基础学习知识

React 是使用 js搭建快速响应的大型web 应用程序的首选方法

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

等待资源的优化:

1.React.lazy React.suspense 组件的懒加载,暂停

2.ErrorBoundary 报错组件,错误兜底

浏览器的线程执行: JS执行和UI 执行是不可能进行同时进行的

浏览器计算样式布局,UI 绘制比较慢

1.异步更新

2.时间切片(切分重要的任务)

3.React Fiber

React 的更新流程

调度器

1.维护时间切片 2.与浏览器调度 3.有效级调度

协调器

1.将jsx 变为 Fiber ,Fiber 进行对比 ,确定本次更新的Fiber

渲染器

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

渲染流程如下所示:

setState--> Reconsileer(UpdataeContainer)->(Scheduler)Task列表-->浏览器调度-->优先级调度--> JSX转化为Fiber -->Fiber 树进行对比,确定本次更新的Fiber-->Render 渲染器

构建新的 Fiber 树之后对 每一个节点进行对比

react优点,快速响应Fiber,组件化 复用性强,声明式编程,只需要修改渲染器就可以跨端

react缺点,学习成本比较高

开发技术

开发技术:JSX 编程,React Router, Redux 多组件共享信息 ,复用组件UI hook

React组件操作:

1.通过state 操作视图 Mounte 获取数据更新 Ref包存组件对象 unMount 清空 Ref

2.通过 Ref 来获取 DOM

3.使用 Props 和 redux context 实现组件通讯

4.函数使用 useCallback,值或者计算使用 useMemo ,组件包裹 memo

JSX 编程

react 函数组件(没有生命周期,借助Hook return jsx),react 类组件(继承react.Coponent,有this,生命周期,render方法)函数式组件相较于class 的优点,代码量骤减没有复杂的生命周期,支持自定义的hook,组件和hook 的关系将UI拆分为多个独立的单元,组件就是独立的单元,hook 贴近 内部运行的各种逻辑 effect,state ,context

Hook 的规则和原理

React Hook是React 16.8版本引入的新功能。它们允许您在无需编写类组件的情况下,在函数组件中使用状态和其他React功能。以前,只有类组件才能使用状态和其他React功能,但是现在,使用Hook,您可以在函数组件中使用这些相同的功能,使得功能组件更加强大和灵活。React Hook提供了一些内置的Hook函数,例如useState和useEffect。useState允许您在函数组件中添加本地状态。useEffect允许您在组件更新时运行副作用代码(例如数据获取或DOM更新)。除了这些基本的Hook之外,React社区也提供了许多自定义Hook,可以为您的应用程序提供其他功能和状态。

hook 只用于外层和顶部声明的时候,只能在React 函数中调用Hook自定义hook 必须用 use开头,Hook中的state 是完全隔离的,hook 的本质是一个函数

如何划分组件?

根据 page 里面的不同布局单元进行拆分

组件里面不同的功能模块继续拆分

组件的共享信息: 1.使用 context 和 reducer进行 信息共享 , 使用hook中的 useContext 来添加 GloabalContext ,Reducer 使用 useReducer 来处理 Context

2.使用reactredux里面的方法

组件优化

减少函数的重复调用, 用memo ,和useMemo 包裹函数体

react-dom 里面的 使用creatPortal 改变组件挂载真实渲染的位置,而不是代码编写的位置,冒泡问题的解决

逻辑的复用,useRequest

React 的状态管理

问题引入: 状态管理为什么不引入window全局变量实现,新版本可以使用hook 来实现功能

1.全局污染,重复的申明

2.直接取值和赋值,数据变更不清晰

3.渲染粒度不可控

4.react 时间管理回溯

状态管理工具的本质:

管理内存的状态 1.共享内存 2.管理状态 3.页面通讯 4.组件通讯 5.刷新

React 的管理工具: 自带的工具props Context ,单向数据流 Redux,Flux 双向流:Mobox ,原子型:

props 用于简单父子,兄弟的组件通讯 context 相当于全局的变量,难以进行数据的变更情况,内部耦合度较高,出现重复更新,context 会出现层层嵌套, 小型项目中的hook 中的Reducer 更加合适

Redux 是 Flux 的进化版本,用于大型的项目

Mobox 与响应式的写法直接修改就可实现

Recoil 原子化的组件管理,弥补context 的缺点,粒度比较细

Zustand 轻量级,用于移动端比较合适

状态管理工具的原理:

使用发布订阅来实现一个状态管理工具

React 路由

前端的演化 : 静态网站--> 动态网站 --> 前后端分离 -->单页面应用 --> SSR SSG 微前端

静态网站:更新不便利

动态网站: ASP JSP PHP 和前端交互 -->门户网站

前后端分离:AJax 的使用

单页面的应用:webpack,MVVC, webComponnent reat vue 出现 server +后端路由

React-router:分为 BrowserRouter (基于history接口实现)和 HashRouter (基于hash)

history接口实现,变化监听和路由的操作

主要完成路由的匹配和路由参数传递

单页面的优化,应用开发收缩,切割,微前端的处理 分为多个 SPA 应用 ,lazy+ suspens,next/remix 路由申明