使用方法
html 中的 div 容器叫根节点
根节点内的所有内容都是由 ReactDOM 进行管理
一个 React 应用只有一个根节点,用 ReactDOM.render() 方法将 react 元素渲染到根节点中
const rEL = <h1 className="title">This is a title</h1>;
/**
* @param ReactElement - react元素
* @param rootNode - 根节点
*/
ReactDOM.render(
rEl,
document.getElementById('app');
)
基本的更新逻辑
React 元素是不可变对象 imutable Object
- 不能添加属性
- 不能修改属性
- 不能删除属性
- 不能修改属性的枚举、配置、可写
enumerable / configurable / writable
ReactDOM.render 会深度对比新旧元素的状态,只会做必要的真实 DOM 更新 ```jsx function update(){ const rEl = (
This is a title
{ new Date().toString() }
ReactDOM.render( rEl, document.getElementById(‘app’); ); }
setInterval(update, 1000); // 观察 element 中节点的更新状况 // h1 没有更新 // 只有 h2 在更新
- 渲染之前 -> 每个 React 元素组成一个虚拟 DOM 的对象结构 -> 渲染
- 更新之前 -> 形成新的虚拟 DOM 的对象结构 -> 对比新旧的虚拟DOM节点 -><br /> 分析出两者的不同点 -> 形成一个 DOM 更新的补丁 -> 操作真实 DOM (更新真实 DOM )
以分析对比形成补丁来剔除一些不必要的 DOM 操作
- DOM 元素内容更新
- DOM 元素位置变更
来优化性能
```jsx
// 类组件
class Title extend React.Component {
render (){
return <h1>This is a title.</h1>
}
}
// 函数组件
function Title(){
return ( <h1>This is a title.</h1> );
}
// <Title /> 相当于实例返然后 运行render()
// 也可以 React.createElement()把类转变React元素
ReactDOM.render(
// <Title />,
// React.createElement(Title),
document.getElementById('app');
)
如果是组件渲染
ReactDOM.render 的第一个参数一定要是 React 元素
- 组件使用 JSX 语法
- 使用 React.createElement 将组件转换为 React 元素
这样才能 使组件内部的 render 函数 或 函数组件 执行