ReactDOM.render 与 React 组件渲染区别

Posted

技术标签:

【中文标题】ReactDOM.render 与 React 组件渲染区别【英文标题】:ReactDOM.render vs React Component render difference 【发布时间】:2018-07-01 12:49:29 【问题描述】:

我已经开始学习 React。 render() 方法用在两个地方:

    使用 ReactDOM.render()
ReactDOM.render( <
  Test / > ,
  document.getElementById('react-application')
);
    Other 在扩展组件的类内部。
class Test extends React.Component 
  render() 
    return ( <
      div > Hello < /div>
    )
  

这两种渲染方法的具体区别是什么?

【问题讨论】:

ReactDOM.render 与组件的渲染方法无关。 ReactDOM.render 将组件渲染到 DOM,而组件的渲染返回构成组件的元素。 【参考方案1】:

TLDR:

React 在添加(挂载)到实际浏览器 DOM 之前创建一个虚拟 DOM,在它显示之前。这两种方法中的一种仅执行第一个操作,而另一种则同时执行。

component.render 只创建虚拟 DOM。它不会将它添加到实际的浏览器 DOM 中。

ReactDOM.render 两者兼而有之。它创建(或更新)虚拟 DOM,然后将其添加到实际的浏览器 DOM。

【讨论】:

【参考方案2】:

React 中有两个独立的 render() 方法。一个是ReactDOM.render(),另一个是Component.render()

Component.render()

组件的render() 方法不接受任何参数,并返回该组件对应的 React 元素树。 Component.render() 在组件的 props 或状态发生更改并且 shouldComponentUpdate() 返回 true 时被调用。基于新的 props 和 state 从 Component.render() 方法返回一个新的元素 React 元素树。

ReactDOM.render()

ReactDOM.render(element, container) 方法是一个*** API,它将元素树的 React 元素根和容器 DOM 元素作为参数。然后它将传递的 React 元素转换为相应的 DOM 元素(树),然后将该元素作为子元素挂载到容器 DOM 元素中。

不过,在将任何 DOM 元素挂载到容器之前,React 会在传递的元素树和当前挂载的 DOM 之间进行比较,以确定必须更新当前挂载的 DOM 中的哪些 DOM 节点才能匹配新传递的元素树。

阅读更多关于 ReactDOM.render() here

【讨论】:

以上是关于ReactDOM.render 与 React 组件渲染区别的主要内容,如果未能解决你的问题,请参考以下文章

React源码 ReactDOM.render

ReactDOM.render和ReactDOM.createPortal

React 源码分析:调用ReactDOM.render后发生了什么

如何使用 ReactDOM Render 渲染一个 React 组件

ReactDOM.render:React 从 16.4.2 升级到 16.5.2 后,无法在未安装的组件上找到节点

ReactDOM.render