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/3jmJgZFktP2NMT8XLvdIKQbabel

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)方法提供的语法糖。spa

全部的 JSX代码最后都会转换成 React.createElement(...)Babel帮助咱们完成了这个转换的过程。code

因此使用了 JSX的代码都必须引入 Reactcomponent

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

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

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

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

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

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

相关文章
相关标签/搜索