We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
// 定义一个组件, 如果是 class 组件, 会调用 React.Element 构造函数 function App() { return <h1>Hello World!</h1> }; // 调用 createElement 实例化组件, 仅实例化 <App>, 不会递归向下继续调用 createElement const elements = <App />; // 此时会再调用 createElement 去实例化 <h1> // render 有可选的第三个参数 callback, 当 render 结束时调用 ReactDOM.render( elements, document.getElementById('container') );
React.Element 构造函数 function Component(props, context, updater) {} 第三个入参 updater 是什么? 暂时还不了解作用 源码注释说, 真正的 updater 是由 renderer 注入的. 但在 constructor 中打印 updater 是 undefined, 延伸问题: updater 到底是什么时候注入的?
function Component(props, context, updater) {}
updater
ReactDom.render 是什么时候实例化 children(<h1>) 的? render 内部只做了些校验, 然后调用 legacyRenderSubtreeIntoContainer. legacyRenderSubtreeIntoContainer 首先基于 container 创建 root, 然后会调用 updateContainer 对其更新, 这个更新过程是 unbatched 的, 因为是初次更新, 要一次性完成 updateContainer 是 reconciler 的一部分, 获取 current 和 update, 然后调用 enqueueUpdate 进行将更新加入队列, 最后调用 scheduleUpdateOnFiber 将更新应用至真实 dom
ReactDom.render
<h1>
render
legacyRenderSubtreeIntoContainer
updateContainer
unbatched
enqueueUpdate
scheduleUpdateOnFiber
<h1>Hello World! <span>111</span> end</h1>, 该代码为什么 createElement 创建 <h1> 时 children 只有 Hello World! ? 其它 children 是怎么渲染出来的
<h1>Hello World! <span>111</span> end</h1>
createElement
Hello World!
Fiber 队列中的更新是什么时候出队的?
The text was updated successfully, but these errors were encountered:
No branches or pull requests
Questions
React.Element 构造函数
function Component(props, context, updater) {}
第三个入参updater
是什么?暂时还不了解作用
源码注释说, 真正的
updater
是由 renderer 注入的. 但在 constructor 中打印 updater 是 undefined, 延伸问题: updater 到底是什么时候注入的?ReactDom.render
是什么时候实例化 children(<h1>
) 的?render
内部只做了些校验, 然后调用legacyRenderSubtreeIntoContainer
.legacyRenderSubtreeIntoContainer
首先基于 container 创建 root, 然后会调用updateContainer
对其更新, 这个更新过程是unbatched
的, 因为是初次更新, 要一次性完成updateContainer
是 reconciler 的一部分, 获取 current 和 update, 然后调用enqueueUpdate
进行将更新加入队列, 最后调用scheduleUpdateOnFiber
将更新应用至真实 dom<h1>Hello World! <span>111</span> end</h1>
, 该代码为什么createElement
创建<h1>
时 children 只有Hello World!
? 其它 children 是怎么渲染出来的Fiber 队列中的更新是什么时候出队的?
The text was updated successfully, but these errors were encountered: