1. 函数组件jsx编译处理
function App() {const [count, setCount] = React.useState(0)return <div><div>Hello World</div><div>Number: {count}</div><button onClick={() => setCount(v => v + 1)}>Increment</button></div>}ReactDOM.render(App, document.querySelector('#app'))
App是一个Element 不是ReactNode
编译输出
const AppElement = {$$typeof: Symbol(react.element),_store: { validated: false },ref: null,props: {},_source: null,_owner: null,_self: null,key: null,type: function App() {var _React$useState = React.useState(0)_React$useState2 = _slicedToArray(_React$useState, 2)count = _React$useState2[0]setCount = _React$useState2[1]return React.createElement('div',null,React.createElement('div',null,'Hello World',),React.createElement('div',null,'number:',count,),React.createElement('button',{onClick: function (v) {return setCount(function (v) {return v + 1;});},},'Increment',))}}
2. render方法处理
2.1 isValidContainer
检查是否合法的容器组件 我们给的是document.querySelector(‘#app’) 符合条件
2.2 isContainerMarkedAsRoot
检查是否根节点
3. legacyRenderSubtreeIntoContainer
很明显只有几个地方调用且互斥的情况 所以整个react执行流程 该方法只执行了一次
把子树放入容器中
3.1 topLevelUpdateWarning 顶层应用更新
顶层应用更新告警 一般是组件更新 顶层应用的更新不知道会发生啥
3.2 _reactRootContainer应用根节点
react应用根节点
