React基础 | 青训营笔记

104 阅读2分钟

一、基础知识

1.特点:声明式、组件化、跨平台编写。

2.react一定程度上解决等待资源加载(React.Lazy,React.Suspense,ErrorBoundary),跟浏览器线程(js会阻塞浏览器渲染)执行(异步更新,时间切片,React Fiber)的问题。

React.lazy 函数能让我们像渲染常规组件一样处理动态引入(的组件); 如果在 App 渲染完成后,包含 OtherComponent 的模块还没有被加载完成,我们可以使用加载指示器为此组件做优雅降级。这里我们使用 Suspense 组件来解决; ErrorBoundary 捕获子组件的渲染异常,在渲染页面出错时,提供备用UI。 eg:

image.png

image.png

二、react更新流程:主要靠三个“车间”——调度器,协调器,渲染器。 调度器:要进行优先级调度;协调器:会确定fiber;渲染器:管理react树。 (协调器要让整个fiber树渲染好了之后再给渲染器渲染,然后渲染器渲染好后传给调度器,选择高级任务执行) image.png react有双渲染树(类似vue)

三、函数式组件和class组件

1.组件架构 数据:通过定义state操作视图,mount是获取数据更新state,ref保存与视图无直接相关的值,unmount前清空ref---通信:props父子组件通信,context&redux组件间信息共享--->ui:通过ref获取到DOM。(定时器可能用到ref) 2.函数:没有生命周期,return JSX,借助Hook; (1)hook只能在最顶层使用(eg:

image.png)例子中if应该写下自useEffect函数中; (2)hook只能在react函数中调用; (3)hook会有过期闭包问题。

对比之下,class组件有生命周期,有构造、继承函数,this调用方法数据,有render渲染方法。

记录一些常见的react API &HOOK:

image.png

image.png

四、在项目中拆分组件粒度:layout——page——component

五、组件之间通信

1.父子组件: 父与子:prop,cloneElement;子与父:prop,forwardRef; ps:若有参数,要在函数中传入 (在VUE中,使用props传递)

2.组件间通信: useContext & useReducer (eg:

image.png) 分析:利用useContext把globalContext传入

redux:(eg:

image.png) 分析:将store中的state传入props中

(VUE中,组件间通过bus传递信息)

六、组件性能优化 使用userCallback(返回函数),userMemo(返回值),memo

image.png q1.1:在内存中没有两个相等的对象

七、组件挂载

传入容器,组件挂载容器中,没有传入容器就挂载在本身

使用portal:将真实DOM的渲染位置改变了