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