React 和 ReactDOM 的核心API包括createElement、Component、render

- 问题1,为甚要使用React 和 ReactDOM
- JSX编译后实际调⽤用React.createElement方法,所以只要 出现JSX的文件中都需要导入React类
- React负责逻辑控制,数据 -> VDOM。具体就是
React使用JSX来描述UI。
babel-loader把JSX 编译成相应的 JS 对象, React.createElement(type, config, children)再把这个JS对象构造成React需要的虚拟 dom,重点逻辑就是
props.children = chilren, 另外增加key,ref等。 - 然后ReactDom渲染实际DOM,具体是使用ReactDOM.render(vnode, container)方法把VDOM -> DOM
这里需要特殊说明的是: 初次渲染的时候render函数直接把vnode->node->挂载container, 更新的时候vnode -> diff ->node ->更新到container
createElement、Component、render源码实现具体看level5文件夹
看重点
const jsx = (
<div className="box">
<div className="border">我是文本1 <div className="border">我是文本4</div></div>
<div className="border">我是文本2</div>
<div className="border">我是文本3</div>
</div>
);
//vnode->node
//container.apppendChild(node)
ReactDOM.render(jsx, document.getElementById("root"));
- 我这里是一个简单的jsx 先看react是如何构建虚拟DOM树的:

经过creatElement处理之后形成虚拟DOM树如下图:



下面结论摘自掘金结论等自己研究完fiber后再看。
由此可以得出Fiber 的渲染方式:从父节点开始,向下依次遍历子节点,深度优先渲染完子节点后,再回到其父节点去检查是否有兄弟节点,如果有兄弟节点,则从该兄弟节点开始继续深度优先的渲染,直到回退到根节点结束。