赞
踩
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;
未找到对比目标
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。