1. Dom节点 (ReactDomComponent)
const B = <div></div>{ type: 'div' }2. 组件节点 (ReactComposite)
3. 文本节点 (ReactTextNode)
import ReactDOM from 'react-dom/client';
const root = ReactDOM.createRoot(document.getElementById('root'));
// root.render('一头猪') // 创建文本节点
root.render(1111); // 创建文本节点
4. 空节点(ReactEmpty)
{this.state.xxx ? <App/> : false}import ReactDOM from 'react-dom/client'
const root = ReactDOM.createRoot(document.getElementById('root'));
// root.render(flase); // 创建空节点 // root.render(true);
// 创建空节点 root.render(null)
root.render(undefined) // 创建空节点
5. 数组节点(ReactArrayNode)
首次渲染阶段
React 会根据初始元素先生成虚拟节点,然后做了一系列操作后最终渲染成真实的UI
根据不同的虚拟节点来看它到底做了些什么处理?
1 )初始元素-dom节点
// jsx 语法: React初始元素
const B = <div class='wrapper' style={
{
color: 'red'}}>
<p className='text'>123</p>
</div>
2 )初始元素-组件节点
3 )文本节点
4 )空节点
5 )数组节点
注意,嵌套组件渲染时的大致执行顺序
组件更新(setState)
根节点更新(ReactDOM.createRoot().render)
import React from 'react';
import ReactDOM from 'react-dom/client';
import'./index.css';
import App from'./App';
const root = ReactDOM.createRoot(document.getElementById('root');
root.render(
<App/>
);
对比更新过程(diff)
key的作用
如果列表里面有初始元素,并且没有给初始元素添加 key那么它会警告
那么 key值到底是干嘛用的呢?
现在来举个例子,假如现在有五个兄弟节点更新后变成了四个节点
未添加key
找到对比目标-节点类型一致
3.文本节点
4.空节点
5.数组节点
找到对比目标-节点类型不一致
import'./App.css';
import React from 'react';
function Count(props) {
console.log('Count')
return <h1>{
props. count}</h1>
}
class App extends React. Component {
constructor() {
super()
this.state={
arr:[1,2,3]
}
this.update =this.update.bind(this)
}
update() {
this.setState({
arr: [1,2,3,4]
})
}
render() {
console.log('父亲render执行')
return (
<div>
<button onClick={
this.update}>点我更新</button>
{
this.state.arr.map((count) => <Count key={
count} count={
count} />) }
</div>
)
}
}
export default App;
未找到对比目标
更多【react.js-React18原理: 渲染与更新时的重点关注事项】相关视频教程:www.yxfzedu.com