README
myReact
网上react
核心机制的文章有很多,但是介绍react
整个完整的核心流程的却很少,该demo
适合想深入了解react
核心机制与整体流程的人。我在这里把react
从定义组件到渲染以及更新的核心部分都写在lib
文件中,主要涉及到五个核心文件。
React.js
- 包括
Component
和createElement
的定义
- 包括
ReactDom.js
- 定义了
render
方法
- 定义了
Diff.js
- 实现
diff
算法
- 实现
Patch.js
- 将使用
diff
算法得到的差异应用到页面中 在Issues
中有对每个文件进行详细的介绍
- 将使用
Install
method one
git clone https://github.com/LongJinCen/myReact.git
npm install
npm run start
method two
npm install ljc_react
cd node_modules
cd ljc_react
npm install
npm run start
Usage
在webpack.config.js
的entry
属性中配置你想要运行的src
目录下的单个入口文件,仅支持单个文件,例如你想要运行src
下面的index.js
,那么将entry
属性改为./src/index.js
,修改配置文件之后别忘了重启项目,之后执行的将是该文件,同时支持CommonJs
和es6
的import
模块。
在这里请使用es6的class
来声名一个组件,我们可以像使用react
一样使用该demo
,包括继承React.Component
,定义一个render
方法,定义state
并调用setState
改变它。
请务必先查看并运行提供的两个测试文件来帮助你理解如果使用提供的源码
需要注意的是
- 由于这里没有使用
jsx
语法,所以使用的是模板字符串的形式,也就是你的render返回的必须是一个字符串,而且在React.createElement
的实现上也和官方的有所差别,不过最终都是将render
返回的转换为一个virtul-dom
对象。 - 在这里不能像
react
里面那样使用组件,如果你想使用一个组件,请使用组件.render()
的方式通过模板字符串嵌入到当前结构中 - 不能绑定事件,这里由于使用的是模板字符串,要绑定事件有很大的难度,所以你在测试的过程中不能绑定事件。虽然没有绑定事件,但是事件引起的
state
改变->diff
->dom
操作 这一流程仍然写在源码中
More
关于该demo
具体的介绍请查看Issues中对react
执行流程的介绍,另外由于水平有限,如有错误的地方,请指出