react----------react初次渲染

参考:https://mp.weixin.qq.com/s?__biz=MjM5MTA1MjAxMQ==&mid=2651229767&idx=1&sn=8f06283e43cfcda722189b56644f4dfc&chksm=bd4957c38a3eded58cd388130c4f303ff4033213ffcf157698d50f1ebfe87788a7f74d8be76a&scene=21#wechat_redirect

        和

        https://mp.weixin.qq.com/s/3jmJgZFktP2NMT8XLvdIKQ

React组件的渲染流程是什么?

  • 使用 React.createElementJSX编写 React组件,实际上所有的 JSX代码最后都会转换成 React.createElement(...)Babel帮助我们完成了这个转换的过程。

  •  createElement函数对 keyref等特殊的 props进行处理,并获取 defaultProps对默认 props进行赋值,并且对传入的孩子节点进行处理,最终构造成一个 ReactElement对象(所谓的虚拟 DOM)。

  •  ReactDOM.render将生成好的虚拟 DOM渲染到指定容器上,其中采用了批处理、事务等机制并且对特定浏览器进行了性能优化,最终转换为真实 DOM

为什么代码中一定要引入React?

JSX只是为 React.createElement(component,props,...children)方法提供的语法糖。

所有的 JSX代码最后都会转换成 React.createElement(...)Babel帮助我们完成了这个转换的过程。

所以使用了 JSX的代码都必须引入 React

为什么React组件首字母必须大写?

babel在编译时会判断 JSX中组件的首字母,当首字母为小写时,其被认定为原生 DOM标签, createElement的第一个变量被编译为字符串;当首字母为大写时,其被认定为自定义组件, createElement的第一个变量被编译为对象;

React在渲染真实Dom时做了哪些性能优化?

IE8-11Edge浏览器中,一个一个插入无子孙的节点,效率要远高于插入一整个序列化完整的节点树。

React通过 lazyTree,在 IE8-11Edge中进行单个节点依次渲染节点,而在其他浏览器中则首先将整个大的 DOM结构构建好,然后再整体插入容器。

并且,在单独渲染节点时, React还考虑了 fragment等特殊节点,这些节点则不会一个一个插入渲染。

猜你喜欢

转载自www.cnblogs.com/celine-huang/p/11527265.html