React 特点

1. 虚拟Dom


浏览器DOM是由HtmlElement元素组成的树,虚拟DOM是有ReactNode节点元素组成的树。每次数据变化React都会扫描整个DOM树,自动计算与上次虚拟DOM的差异变化,然后针对需要变化的部分进行实际的浏览器DOM更新,从而提高性能。

在文本框中输入任意文本,在禁止文本框,可以发现文本框中原来输入的文本并没有消失,说明React并没有重新渲染input,只是更改了input属性值,这正是react差异对比、局部刷新的特性体现。

虚拟DOM->真实DOM: react-dom
虚拟DOM->移动APP: react-native

将一棵树形结构转换成另一棵树形结构传统最优算法的复杂度是O(n3)。

试探法:通过给子级组件设定唯一的键值,React就能够检测出节点插入、移除和替换,并且借助哈希表使节点移动复杂度变为O(n)。键值只需要在兄弟节点中唯一即可,而不需要是全局唯一的。

虚拟DOM的特殊属性:

  • key:可选的唯一标识符。
  • ref:用于访问组件对应的实际DOM元素。
  • dangerouslySetInnerHTML: 用来直接插入纯HTML文本字符串,避免React的自动转义。
var content = '<span>文本内容</span>';
<div dangerouslySetInnerHTML={{_html: content}}></div>

2. 组件化


从功能角度划分,将UI分解成不同组件,各组件都独立封装,每个组件只关心自身的逻辑。

3. 单向数据流


单项的数据流动:从父节点到子节点

组件只需要从父节点获取prop渲染即可,如果顶层组件的某个prop改变了,React会递归地向下遍历整棵组件树并重新渲染所有使用这个属性的组件。单项数据流的架构模式Flux,以M层Store为核心,围绕Store设计Action和Dispatcher。

Category: React

Author: Yoga

Article
Tagcloud
DVA Java Express Architecture Azure CI/CD database ML AWS ETL nest sql AntV Next Deep Learning Flutter TypeScript Angular DevTools Microsoft egg Tableau SAP Token Regexp Unit test Nginx nodeJS sails wechat Jmeter HTML2Canvas Swift Jenkins JS event GTM Algorithm Echarts React-Admin Rest React hook Flux Redux ES6 Route Component Ref AJAX Form JSX Virtual Dom Javascript CSS design pattern