react render

304 阅读1分钟
reactrender:Reconciler工作的阶段被称为render阶段。因为在该阶段会调用组件的render方法
jsx元素要在页面上渲染出来,首先需要调用React.createElement -> React.render(FiberRootNode)-> 创建更新对象 -> 处理更新队列(任务调度) -> 进入commit阶段 -> 渲染完成

React.createElement

```
//JSX代码
<div id='1'>1</div>

// 转换之后:    
React.createElement("div", {
    id: "1"
}, "1")
```

大家可以在babel进行一个更加细致的转换:https://babeljs.io/

Fiber Reconciler 是从 Stack Reconciler 重构而来,通过遍历的方式实现可中断的递归,所以 performUnitOfWork 的工作可以分为两部分:“递”和“归” --- --- ---“递”和“归”阶段会交错执行直到“归”到 rootFiber

递: beginWork---开始

归:completeWork---结束

“递”阶段:
    从 rootFiber 开始向下深度优先遍历。为遍历到的每个 Fiber节点 调用beginWork方法,
该方法会根据传入的 Fiber节点 创建 子Fiber节点 ,并将这两个 Fiber节点 连接起来,
当遍历到叶子节点(即没有子组件的组件)时就会进入“归”阶段。
“归”阶段
  在“归”阶段会调用completeWork 处理 Fiber节点 。
当某个 Fiber节点 执行完 completeWork ,如果其存在 兄弟Fiber节点 (即 fiber.sibling !== null )
会进入其兄弟Fiber 的“递”阶段 , 如果不存在 兄弟Fiber , 会进入 父级Fiber 的“归”阶段。