review
首先让我们回顾一下一些基本概念。如果你已经对 React、JSX 和 DOM 元素的工作原理有了很好的了解,你可以跳过这一步。
我们将使用这个 React 应用程序,只有三行代码。第一行定义了一个React元素,第二行从 DOM 中获取一个节点,最后一行是将 React 元素渲染到容器中。
上述代码是用 JSX 进行定义的,它甚至不是一段有效的 JavaScript 代码,所以接下来,首先要做的就是用普通的 JavaScript 代码去代替它。
#
1. 定义元素JSX 可以通过 Babel 等转译成 JS 代码。这种转换通常很简单:调用 React.createElement
替换标签内的代码,将标签名称、属性和子元素作为参数进行传递。
React.createElement 的主要功能是根据参数创建一个对象。所以,在此我们可以用它的输出代替函数调用。
这是一个拥有两个属性(type、props)的元素对象:
type
是一个字符串,指定我们要创建的 DOM
节点的类型,当你想创建一个HTML元素时,它是你传递给 document.createElement
的 tagName
。type
也可以是一个函数,但是这部分内容会放在第7步进行探讨。
props
是另一个对象,它有所有来自 JSX 属性的键和值。它还有一个特殊的属性:children。children 在这里是一个字符串,但它通常是一个有更多元素的数组。这就是为什么元素也是树。
#
2 渲染元素render 是 React 改变 DOM 的方式。那么,如何用普通 JavaScript 替换它呢?
#
2.1 创建 DOM 节点首先根据元素类型 element.type
创建 DOM 节点,并将相关属性进行传递。
#
2.2 创建子节点根据元素 children 属性创建元素子节点。此处,是一个字符串作为子节点,即创建一个文本节点即可。
#
2.3 链接节点最后,将相应的子节点加入到父节点中,并将根节点加入到 container
中
#
3 完整代码对比转换成: