分享更有价值
被信任是一种快乐

怎样深入理解react

文章页正文上

这篇文章给大家介绍怎样深入理解react,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。理解ReactElement和ReactClass的概念首先让我们理解两个概念:ReactElement一个描述DOM节点或component实例的字面级对象。它包含一些信息,包括组件类型type和属性props。就像一个描述DOM节点的元素(虚拟节点)。它们可以被创建通过React.createElement方法或jsx写法分为DOM Element和Component Elements两类:DOM Elements当节点的type属性为字符串时,它代表是普通的节点,如div,spanComponent Elements当节点的type属性为一个函数或一个类时,它代表自定义的节点ReactClassReactClass是平时我们写的Component组件(类或函数),例如上面的Button类。ReactClass实例化后调用render方法可返回DOM Element。react渲染过程过程理解:调用React.render方法,将我们的element根虚拟节点渲染到container元素中。element可以是一个字符串文本元素,也可以是如上介绍的ReactElement(分为DOM Elements, Component Elements)。根据element的类型不同,分别实例化ReactDOMTextComponent, ReactDOMComponent, ReactCompositeComponent类。这些类用来管理ReactElement,负责将不同的ReactElement转化成DOM(mountComponent方法),负责更新DOM(receiveComponent方法,updateComponent方法, 如下会介绍)等。ReactCompositeComponent实例调用mountComponent方法后内部调用render方法,返回了DOM Elements。再对如图的步骤2⃣递归。react更新机制每个类型的元素都要处理好自己的更新:自定义元素的更新,主要是更新render出的节点,做甩手掌柜交给render出的节点的对应component去管理更新。text节点的更新很简单,直接更新文案。浏览器基本元素的更新,分为两块:先是更新属性,对比出前后属性的不同,局部更新。并且处理特殊属性,比如事件绑定。然后是子节点的更新,子节点更新主要是找出差异对象,找差异对象的时候也会使用上面的shouldUpdateReactComponent来判断,如果是可以直接更新的就会递归调用子节点的更新,这样也会递归查找差异对象。不可直接更新的删除之前的对象或添加新的对象。之后根据差异对象操作dom元素(位置变动,删除,添加等)。***步:调用this.setState第二步:调用内部receiveComponent方法这里主要分三种情况,文本元素,基本元素,自定义元素。自定义元素:receiveComponent方法源码updateComponen免费云主机、域名t方法源码内部_performComponentUpdate方法源码文本元素:receiveComponent方法源码基本元素:receiveComponent方法源码updateComponent方法源码this._updateDOMChildren方法内部调用diff算法,请看下一节……..react Diff算法diff算法源码react的优点与总结优点虚拟节点。在UI方面,不需要立刻更新视图,而是生成虚拟DOM后统一渲染。组件机制。各个组件独立管理,层层嵌套,互不影响,react内部实现的渲染功能。差异算法。根据基本元素的key值,判断是否递归更新子节点,还是删除旧节点,添加新节点。想要更好的利用react的虚拟DOM,diff算法的优势,我们需要正确的优化、组织react页面。例如将一个页面render的ReactElement节点分解成多个组件。在需要优化的组件手动添加 shouldComponentUpdate 来避免不需要的 re-render。关于怎样深入理解react就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

相关推荐: web开发中低代码开发会带来怎样的安全风险

今天就跟大家聊聊有关web开发中低代码开发会带来怎样的安全风险,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Gartner 还预测,在疫情期间远程开发的激增将继续推动低代码的采用,尽管削减了预算并努力优…

文章页内容下
赞(0) 打赏
版权声明:本站采用知识共享、学习交流,不允许用于商业用途;文章由发布者自行承担一切责任,与本站无关。
文章页正文下
文章页评论上

云服务器、web空间可免费试用

宝塔面板主机、支持php,mysql等,SSL部署;安全高速企业专供99.999%稳定,另有高防主机、不限制内容等类型,具体可咨询QQ:360163164,Tel同微信:18905205712

主机选购导航云服务器试用

登录

找回密码

注册