React基础与实践丨青训营笔记

78 阅读2分钟

React哲学

React主要是用来解决浏览网页卡顿问题,在听课时我了解到React不一定是用起来快的,但是在页面有大量数据需要渲染下用起来是流畅的,它主要解决的问题是等待资源加载时间大部分情况下浏览器单线程执行这两大影响web性能的问题.

等待资源加载浏览器线程执行
React.Lazy异步更新
React.Suspense时间切片
ErrorBoundaryReact Fiber

React由三大部分Scheduler,Reconciler,Renderer这三者组成

SchedulerReconcilerRenderer
维护时间切片将JSX转换为Fiber渲染器用于管理一棵React树
与浏览器任务调度Fiber树对比(新旧对比)
优先级调度确定本次更新的Fiber

用React开发Web应用

  1. 架构:(打包配置JSX->babel->Js),加载优化与错误降级
  2. 路由:React Router
  3. UI: 组件库
  4. 状态管理:context redux mobx

Hook 过期闭包问题

  1. 在Js中,函数运行的上下文是由定义的位置决定的,当函数的闭包包住了旧的变量值时,就出现了过期闭包
  2. 在React中useEffect里的解决方案是传入第二个参数,当第二个参数里的值变化时,就会触发useEffect里的内容更新

React常见的API及作用

这里记录几个我感觉很有感悟的API

React.cloneElement克隆并返回新React元素,并且可以为新元素添加额外props
React.Children.[Fn]map遍历并返回;forEach仅遍历;count子组件数量;only是否只有一哥子节点
React.createRef可以用来存储定时器,这样在组件更新后不受影响
React.forwardRef转发ref和与useImperativeHandler联合使用暴露方法
React.lazy实现组件动态加载
React.Suspense组件加载过程优雅降级

如何划分组件

一个页面可以拆分成多个模块,这样便于维护

通信

父传子

  1. 父组件通过props传递给子组件
  2. context

子传父

  1. ref与useImperativeHandler

组件间共享信息

  1. context&reducer

组件优化

  1. context里的值更新,会影响组件更新
  2. memo
  3. useMemo
  4. useCallback(解决没有相同的函数问题

组件挂载位置

  1. container与ref
  2. createPortal(将真实DOM的渲染位置改变了),冒泡时是冒泡到React树上的父组件

逻辑复用useRequest

了解到了useRequest是如何实现的~

结语

听完杨老师的这节课,我收获了很多之前没深入了解的知识且对以学的知识有了更深的感悟,感谢老师~