理解React的核心——Virtual DOM和Diff

React通过JS对象模拟原生DOM,加上DOM Diff 极大提升了DOM操作的性能。
Virtual DOM:ReactElement 树,轻量级的JavaScript对象,并通过 ReactDOM 的 render 方法渲染到真实 DOM 上。

var Element = {
  type: 'div',
  props: {
    className: css,
    childlren: []
  }
};

React diff:帮助我们计算出 Virtual DOM 中真正变化的部分,由虚拟 DOM来确保只对界面上真正变化的部分进行实际的DOM操作,而非重新渲染整个页面,从而保证了每次操作更新后页面的高效渲染。

浅谈ReactDiff算法的几个规则:

  • 不同节点比较:节点类型不同则直接删除旧节点,插入新节点
  • 列表节点的比较:设置唯一的key,可以帮助react快速定位要修改的元素
    JSX:每一个JSX元素都只是 React.createElement(component, props, ...children) 的语法糖。因此,任何时候你用JSX语法写的代码也可以用普通的 JavaScript 语法写出来。
class Hello extends React.Component {
  render() {
    return <div>Hello {this.props.toWhat}</div>;
  }
}

ReactDOM.render(
  <Hello toWhat="World" />,
  document.getElementById('root')
);
//可以被编译为不使用JSX的代码
class Hello extends React.Component {
  render() {
    return React.createElement('div', null, `Hello ${this.props.toWhat}`);
  }
}

ReactDOM.render(
  React.createElement(Hello, {toWhat: 'World'}, null),
  document.getElementById('root')
);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 参考文章:深度剖析:如何实现一个Virtual DOM 算法 作者:戴嘉华React中一个没人能解释清楚的问题——...
    waka阅读 11,226评论 0 21
  • 3. JSX JSX是对JavaScript语言的一个扩展语法, 用于生产React“元素”,建议在描述UI的时候...
    pixels阅读 7,939评论 0 24
  • 天刚刚露出鱼肚白,外婆就起身下床,给衣服扣上最后一颗扣子后回头给我盖上被子。然后,我就听到房门嘎吱一声,然后,又是...
    粒粒安阅读 3,184评论 0 2
  • 道德三皇五帝, 功名夏后商周, 五霸七雄闹春秋, 顷刻兴亡过首。 青史几行名姓, 北茫无数荒丘, 前人撒种后人收,...
    霹雳球阅读 4,980评论 0 1
  • 你的文章没有人读吗? 你的名气还没有出来吗? 你是否已经相当的着急? 现在的新媒体文,将文章的题目拉的无限的长。 ...
    利君理疗阅读 2,224评论 0 1

友情链接更多精彩内容