1 React 特性与简介
定义:用于构建用户界面的JavaScript库
特点:声明式(用户只需关注结果,告诉机器要达到什么目的),组件化(把页面拆分成多个组件),跨平台编写(靠渲染器实现)
1.1 Thinking In React
(ErrorBoundary)错误边界:抛出错误时调用如下代码:
JS执行与UI绘制是没有办法同时进行的
时间切片不再操作真实的dom,操作虚拟的dom,所有新任务执行完后,通过虚拟dom数生成一个真实的dom
1.2 更新流程
协调器为React最主要的工作车间
React 的渲染流程是: JSX → 虚拟 DOM → 真实 DOM
React 的更新流程是: props/state 改变 → render 函数重新执行→产生新的 DOM 树→新旧 DOM 树进行 diff→ 计算出差异进行更新→更新到真实的 DOM
优点:1.快速响应:Fiber 2.组件化:复用性强 3.声明式编程 4.跨平台:只需修改渲染器
缺点:1.大型应用需要配套学习状态管理,路由工具 2.不适合小型应用,需要用babel处理
用React开发web应用:
如果开发web应用组件:
Class组件的特点:1.首先要继承然后再调用构造函数 2.this 3.生命周期 4.render方法
函数式组件:1.没有生命周期 2.借助Hook(不编写class的情况下就使用state) 3.return JSX
Hook使用原则:1.只能在最顶层使用Hook 2.只能在React中调用Hook(具体规则如下图所示)
面试题:
在JS中,函数运行的上下文是由定义的位置决定的,当函数的闭包包住了旧的变量值时,就出现过期闭包问题
常见API及作用:
常见Hook及作用:
3 常见案例
拆分组件——Layout
拆成四个(如图所示):
拆分组件——Page(如图所示):
拆分组件——Component(如图所示):
拆分的组件有:
父组件给子组件通信:
如果知道子组件的表现,则可以直接通过props传递即可,如果不知道具体子组件表现,则可以用cloneElement,克隆一个节点并且传递一些公共的方法
子组件给父组件通信:
传递信息通过callback
组件间共享信息:
组件性能优化:
wapper是最外层的组件,它有两个state,一个是count(给计数器counter用的),一个是name(wapper本身要用到);(如下图所示)
1 用memo包一下 2 用useMemo(返回值)包一下 1.1 useCallback(返回的是一个函数)
组件挂载全局
cratePortal将真实的DOM的渲染位置也改变了
冒泡在蓝色的容器里
渲染层都是虚拟DOM
逻辑复用(useRequest):
1 params 2 auto 3 ready
useRequest run 代码: