React进阶学习
源码阅读流程
- 下载源码
 - 观察package.json:
- 主要使用的依赖
 - 构建相关的脚本
 
 - 根据核心API找寻结构:
- packages/react
 - packages/react-dom
 - packages/react-reconciler
 - packages/scheduler
 
 - 串联整个流程:
- 项目初始化
- ReactDOM.render
 - createRoot
 
 - 数据更新流程
- this.setState
 - const[_,update] = useState()
 - forupdate
 
 - 基本API的使用方式
- hooks
 - useState
 - useReducer
 - useId
 
 
 - 项目初始化
 
React源码下载
1  | git clone https://github.com/facebook/react.git  | 
monorepo与架构
monorepo是一种项目管理方式。指在单个仓库中管理多个项目
monorepo演进
一个Git仓库维护项目所有代码,项目代码随业务复杂度增加而增多,成为单体巨石应用。
项目被拆分为多个业务模块,对应多个Git仓库,模块解耦,降低应用复杂度,每个模块可以独立测试开发。模块仓库随业务复杂度增加二增多,难以进行项目管理,跨仓库共享难,模块依赖管理复杂,增加了项目构建耗时
将多个项目集成到一个仓库下,共享工程配置,同时快捷地共享模块代码。
主流monorepo方案
- lerna
 - pnpm workspace
 - turborepo
 
JSX
一段JSX代码:
1  | const name = 'Jack'  | 
如果想要编译为一段可用的js代码,需要经过babel编译,而babel又需要借助插件@babel/plugin-transform-react-jsx才能便利jsx。
通过React学习我们知道所有JSX语法最终会被编译为React.createElement方法的调用
上述代码经过编译后会变为:
1  | const name = 'jack'  | 
React核心API
从ReactClient.js文件入手,可以看到React暴露给开发者的核心API
- useState
 - useReducer
 - useCallback
 - useMemo
 - userRef
 - createContext,Provider
 - createElement