「React源码分析」七. React DOM之Root根节点操作分析

2021SC@SDUSC

ReactDOM Root节点的相关操作源码分析

Root节点是ReactDOM树中的基本组成部分,对于每个Root节点,有render()方法使其渲染或更新,以及unmount()方法将该节点从ReactDOM树上卸载。
节点render()的渲染更新的具体步骤则是由react-conciler来协调完成的。因此在ReactDOM中,只定义了一个Root节点在调用被render()时,需要作什么样的检查以及相应的错误处理与提示。随后再调用react-conciler完成具体的渲染更新操作。
unmount()则是将Root节点从ReactDOM树中卸载出去,同样需要作出相关的检查、更新节点状态,并最后在ReactDOM树中取消标记其为Root节点。
此外,ReactDOMRoot.js中还提供了createRoot()方法来创建ReactDOM树的Root节点。
相关操作的源代码在packages\react-dom\src\client\ReactDOMRoot.js中定义。

ReactDOMRoot.prototype.render

ReactDOMRoot.prototype.render = function(children: ReactNodeList): void {
   
  const root = this._internalRoot;
  if (root === null) {
   
    throw new Error('Cannot update an unmounted root.');
  }

  if (__DEV__) {
   
    if (typeof arguments[1] === 'function') {
   
      console.error(
        'render(...): does not support the second callback argument. ' +
          'To execute a side effect after rendering, declare it in a component body with useEffect().',
      );
    }
    const container = root.containerInfo;

    if (container.nodeType !== COMMENT_NODE
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值