前置知识:
1.HTML,CSS,JS基础
2.基础的数据结/算法知识,如二叉树,深度遍历等
3.会使用浏览器提供的DOM API 来修改DOM 更新UI
1.1 React 的历史与应用
1.1.1 应用场景
- 前端应用开发,如Facebook、ins、Netflix网页版
- 移动原生应用开发,如ins、Discord、Oculus。
- 结合Electron,进行桌面应用开发。
1.1.2 react的发展历史
其中FaxJS就是react的前身,图中提到的FaxJS的四个特性也是react一直在加强的。
2013年,react正式开源
1.2 React 的设计思路
1.2.1 UI编程的痛点
- 状态更新,UI不会自动更新,需要手动地调用DOM进行更新
- 欠缺基本的代码层面的封装和隔离,代码层面没有组件化
- UI之间的数据依赖关系,需要手动维护,如果依赖链路长,则会遇到“Callback Hell”
1.2.2 响应式编程
针对上面的问题,我们希望react能够:
- 状态更新,UI自动更新
- 前端代码组件化,可复用,可封装
- 状态之间的互相依赖关系,只需声明即可
1.2.3 组件化
组件化定义的一些原则
- 组件是组件的组合/原子组件
- 组件内拥有状态,外部不可见
- 父组件可将状态传入组件内部
共用的状态要上移。状态归属于两个节点向上寻找到最近的祖宗节点
组件设计
- 组件声明了状态和UI的映射
- 组件有Props/State两种状态
- “组件”可由其他组件拼装而成
组件设计的时候可以灵活运用已有的组件
1.3 React (hooks)的写法与 React 实现
1.3.1 React (hooks)的写法
ReactHooks是一种用于函数组件中管理状态和生命周期的特性。通过使用Hooks,可以使代码更加简洁、易读和易于维护。
首先,Hooks需要在函数组件的顶层作用域中使用,即在函数的最外层调用。不要在循环、条件判断或子函数中调用Hooks。这是因为React Hooks内部是链表结构的,如果调用顺序不正确,就会导致指针移动出错,数据存取出错。
useEffect用于在函数组件中执行副作用操作,比如订阅事件、请求数据等。useEffect接受两个参数,第一个是副作用操作的函数,第二个是一个依赖数组,用来控制副作用操作的触发时机。如果依赖数组为空,副作用操作只会在组件挂载和卸载时触发。例如:
import React, { useState, useEffect } from 'react';
function Example() {
const [data, setData = useState([]);
useEffect(() => {
// 在组件挂载和卸载时执行副作用操作
console.log('组件挂载和卸载时执行');
return () => {
// 在组件卸载时执行清理操作
console.log('组件卸载时执行清理操作');
};
}, []);
return (
<div>
{/* 渲染数据 */}
</div>
);
}
在上面的例子中,useEffect函数的第一个参数是一个回调函数,用于执行副作用操作。通过return语句,我们可以在组件卸载时执行清理操作。
除了useEffect,React Hooks还提供了其他的钩子函数,如useContext、useRef等,可以根据具体需求进行使用。它们可以帮助我们更好地管理组件的状态和生命周期,提高代码的可读性和可维护性。
1.3.2 React 实现
问题:
- JSX不符合JS标准语法
- 返回的JSX发生改变时,如何更新DOM
- State/Props更新时,要重新触发render函数
解决: 使用虚拟DOM,它是一种用于和真实DIM同步,而在JS内存中维护的一个对象,它具有和DOM类似的树状结构,并和DOM可以建立一一对应的关系
它赋予了React声明式的API:您告诉React希望让UI是什么状态,React就确保DOM匹配该状态。这使得您可以从属性操作、事件处理和手动DOM更新这些在构建应用程序时必要的操作中解放出来。
1.4 React 状态管理库与应用级框架科普
1.4.1 React 状态管理库
之前我们在讲状态保存的时候,如果是多个组件共用就放在祖宗组件上,这其实很麻烦,这种情况下我们就可以使用React 状态管理库来帮助我们管理。
**原理:**把所有要共同使用的状态都推到组件外进行统一管理,要用的时候在申请就可以了
常见(也是比较推荐的): redux、xstate、mobx、recoil等等
补充: 状态机:显示当前状态,收到外部事件,迁移到下一个状态。例如红绿灯就是一个状态机,它当前是某一种颜色(显示当前状态),过来一段时间(外部事件),他就会变成另外一个颜色(迁移到下一个状态)。
1.4.2 应用级框架科普
还有antd等等,不止这些。