ReactDOM 从原先的React分出来的,它也是React的核心内容;因此一个项目中,React和ReactDOM是一起存在的;并且一些主要的实现如Hooks的逻辑在ReactDOM中实现的;只是它不需要在每个组件都出现,用的多是在AppComponent使用ReactDOM.render方法挂载根组件;
1、ReactDOM给用户提供的API:render、hydrate、findDomNode、createPortal、unmountComponentAtNode、还有其他的一些API(暂不提);
ReactDOM.render(element, container[, callback]):在提供的container中渲染React元素,并返回对该组件的引用,若是函数组件则返回null;若该组件已挂载在container中,则ReactDOM.render会更新该组件,并仅在需要时改变DOM以映射最新的React元素;使用ReactDOM.render的注意事项:1,ReactDOM.render不会改变容器节点(即container),element是在container中作为子元素被渲染;2,初次在container渲染,React元素会直接替换掉container中的所有内容,之后的调用会使用React的DOM差分算法进行高效的更新;3,避免使用ReactDOM.render的返回值,而是为根元素添加callback ref(使用回调的ref attribute,回调接收的是对根元素的DOM引用);4,使用ReactDOM.render()对服务端渲染容器进行hydrate操作的方式已被废弃(会在v17中移除),使用hydrate()代替;
//html
...
<body>
<div id="root">
<!-- React element will be rendered here-->
</div>
</body>
...
//js
let Child = React.memo(function (){
//return React.createElement('input'); //在没有使用JSX的情况下;
return <input />;
});
class App extends React.Component{
render(){
//在没有使用JSX的情况下:
//let child = React.createElement(Child);
//return React.createElement('div', null, [child]);
return <div>
<Child />
</div>;
}