开始之前,先了解以下React、JSX的用法,以及我们需要做的。
1 | import React from 'react'; |
第三行代码是用JSX定义的元素。它不是有效的Javascript代码,所以我们需要使用有效的JS替换它。
JSX通过Babel等构建工具转换为JS.
转换通常很简单:使用React.createElement
函数转换,该函数接收标签名、属性对象、children作为参数.
React.createElement
会根据入参创建一个对象。
该对象具有两个属性:type、props(其实它有更多,但是我们只关心这两个)
- type: 是一个字符串,我们要创建的DOM节点的指定类型.(它也可以是一个函数,在后面会用到)
- props: 是另一个对象,它具有来自JSX属性的所有键值。它还有一个特殊的属性:children.
- children可以是一个字符串,但更多情况下是一个具有更多元素的数组。
1 | const element = <div id="container"> |
以上代码通过Babel转换成
1 | const element = React.createElement( |
我们在控制台把它打印出来可以看到这样一个对象:
简化完就是这样的一个对象:
1 | { |
render函数
是React更改DOM的地方,所以我们如果自己更新上面的代码的话,大致效果如下:
1 | const element = <h1 title="foo">Hello</h1> |
上述创建文本节点是,使用textNode
而不是设置innerText
,是因为我们以后会以相同的方式处理所有元素。还有注意我们是如何设置的,nodeValue
就行我们对h1标题所做的那样,他几乎就像字符串有props: {nodeValue: 'hello'}