前言
之前在阅读React源码的时候,想调试一下,然后debugger看看变量已经数据是怎么传递的,无奈。还要装这么多东西。踩了不少坑,记录一下。帮助大家少踩坑,也为自己做一个笔记。
准备工作
-
已安装 JDK。
-
你已安装
gcc
(或者你在有必要安装编译器的情况下也不觉得麻烦),因为一些依赖可能得经过编译,而在 OS X,Xcode 命令行工具会帮你处理;在 Ubuntu,apt-get install build-essential
会安装所需的 package(其它 Linux 发行版的类似命令也有效);在 Windows 上得做些额外步骤,请参考node-gyp
安装步骤。 -
熟悉 Git。
-
一个可以运行React项目(本文采用create-react-app)
开始
1.获取源代码
- 打开源码地址:github.com/facebook/re…
- 克隆到自己的本地
- 可以下载zip解压
- 也可以Fork到自己的GitHub然后Clone
- 个人建议是Fork,然后可以修改,添加注释等等。可以记录一下自己学习历程
- 也可以直接Clone
2. 建立依赖连接
- 打开项目
- 运行yarn安装依赖
- 运行
yarn build react/index,react/jsx,react-dom/index,scheduler --type=NODE
重新打包 cd build/node_modules/react
进入React这个包内部yarn link
建立连接cd 到原来的项目路径
返回,为了下一次进入react-dom做准备cd build/node_modules/react-dom
yarn link
3.找到一个可以调试的React项目
这里我采用的是create-react-app
npx create-react-app my-app
cd my-app
4. 连接项目和React库
- 删除刚刚建立的项目的
node_modules
中的react
和react-dom
- 打开React项目
yarn link react react-dom
5. 开始调试
-
打开我们clone的项目
-
找到想要调试的地方
- 这里改的地方是
packages/react-dom/src/client/ReactDOMLegacy.js
- 内容如下
export function render( element: React$Element<any>, container: Container, callback: ?Function, ) { + console.log(222); if (__DEV__) { console.error( 'ReactDOM.render is no longer supported in React 18. Use createRoot ' + 'instead. Until you switch to the new API, your app will behave as ' + "if it's running React 17. Learn " + 'more: https://reactjs.org/link/switch-to-createroot', ); } invariant( isValidContainerLegacy(container), 'Target container is not a DOM element.', ); if (__DEV__) { const isModernRoot = isContainerMarkedAsRoot(container) && container._reactRootContainer === undefined; if (isModernRoot) { console.error( 'You are calling ReactDOM.render() on a container that was previously ' + 'passed to ReactDOM.createRoot(). This is not supported. ' + 'Did you mean to call root.render(element)?', ); } } return legacyRenderSubtreeIntoContainer( null, element, container, false, callback, ); } 复制代码
- 这里改的地方是
-
打开React源码的项目
-
运行
yarn build react/index,react/jsx,react-dom/index,scheduler --type=NODE
重新打包 -
打开我们创建的React项目
-
yarn start
-
打开控制台
6. 后续
每次修改源代码都需要
- 运行
yarn build react/index,react/jsx,react-dom/index,scheduler --type=NODE
重新打包 - 刷新一下我们的页面
- 确实很麻烦目前没有好的主意
- 可能这就是修行吧!
结语
有问题可以在下方留言,感觉有帮助。帮忙点个赞
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END