React源码解析 -- 开篇
Chunbin Lv4

版本:17.0.1

前置知识

虚拟DOM

使用js来表示dom树
以react为例子,比如

1
2
3
4
5
<div id="app">
<p class="text">hello world!!!</p>
</div>
---

转化为

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
const virtualDOM = {
tag: 'div',
props: {
id: 'app'
},
chidren: [
{
tag: 'p',
props: {
className: 'text'
},
chidren: [
'hello world!!!'
]
}
]
}

这样当虚拟DOM改变后再改变真实DOM,可以减少真实DOM的操作(注意:不一定快)

React.createElement、jsx和babel

React是通过React.createElement产生虚拟DOM的

1
2
3
4
5
6
7
8
9
<div id="app">
<p class="text">hello world!!!</p>
</div>
// 通过react表示等于
React.createElement("div", {
id: "app"
}, React.createElement("p", {
className: "text"
}, "hello world!!!"));

但是这样的写法写程序非常不友好,所以有了jsx

1
2
3
4
5
function Test(props){
return <div>
你好
</div>
}

然后通过babel插件@babel/plugin-transform-react-jsx转换为React.createElement的型式

可以这里尝试下

拓展

babel原理

 评论
评论插件加载失败
正在加载评论插件
由 Hexo 驱动 & 主题 Keep
访客数 访问量