① http://blog.csdn.net/u013510838/article/details/55669742
② https://purplebamboo.github.io/2015/09/15/reactjs_source_analyze_part_one/
③ https://zhuanlan.zhihu.com/p/20346379?columnSlug=purerender
首先贴出我阅读源码时参考的链接。很感谢作者。
React源码规模十分庞大,开始阅读的时候不能直接陷进去,研究一些细节,而是要先把握整体的流程,对流程有基本了解后再沉下心仔细品味。这里推荐先去阅读上面的链接②,再去参考链接①。参考链接③讲了react diff算法,可以参考react@0.14中对应的文件。
建议看React@15的源码。我一开始阅读源码的时候,把React源码clone了下来,版本比较高在16.0.0-alpha.3以后,源码中没有使用相对路径,用的所谓的全局模块系统,都找不到北。后来就找教程,参考如何阅读。后来就找到了上面两个,也并没有提什么全局模块系统。后来根据参考链接①,将react版本切换到了React@16.0.0-alpha.3。然后就看是研究源代码了。只看代码并不直观,需要配合调试,才能更好地理解。使用官方提供的create-react-app
脚手架,进行编码测试。后来发现默认使用的是React@15.5.4,不过16里面也有对应代码,并且我已经添加了好多注释,并不影响阅读,也就没有再切换版本,当看到ReactDOMComponent
为元素注册事件的时候,就看不下去了,乖乖的直接看测试项目下的node_modules
中的react
和react-dom
模块去了。
React@16这个版本,其实发生了很大的变化,React将要发布fiber特性。React fiber对以前React的核心算法做了全新的改版。不过React@16.0.0-alpha.3代码库中,以前的模块还都存在,可以阅读研究。