响应式系统与React 笔记 | 青训营笔记

116 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的的第10天

React历史与应用

React是用于构建用户界面的JavaScript库,起源于Facebook的内部项目,该公司对市场上所有 JavaScript MVC框架都不满意,决定自行开发一套,用于架设Instagram的网站。于2013年5月开源。

  • 前端应用开发,如 Facebook、Instagram、Netflix 网页版。
  • 移动原生应用开发,如 Instagram、Discord、Oculus。
  • 结合 Electron,进行桌面应用开发。

React概述

  1. 是JavaScript的库,可以简化可视化界面的开发
  2. 是基于JSX语法(JavaScript Xml),JSX是React的核心组成部分,它使用xml标记的方式去直接声明界面,和html、js混写
  3. 核心是组件,将数据和逻辑进行封装。提高了代码复用率,降低了代码维护的难度。

React虚拟DOM

React框架的核心优势之一, 就是支持创建虚拟DOM来提高页面性能。那么,什么是虚拟DOM呢?其实, 虚拟DOM这个概念很早就被提出来了, 是相对于实际DOM而言的。

设计人员在设计传统HTML网页的UI时, 都会在页面中定义若干的DOM元素, 这些DOM元素是所谓的实际DOM。通常, 页面中的实际DOM负责承载着外观表现和数据变化,任何外观形式的改变或数据信息的更新都要反馈到UI上, 都是需要通过操作实际DOM来实现的。

于是, 问题也就自然出现了。对于复杂的页面UI而言, 往往会定义大量的实际DOM。频繁地操作大量实际DOM, 往往会带来访问性能的严重下降, 用户体验也会随之变差, 这些都是设计人员所不希望看到的。因此, React框架专门针对这个现象引入了虚拟DOM机制,以避免频繁的DOM操作带来的性能下降问题。

React DOM类似于一种将相关的实际DOM组合在一起的集合, 是React的虚拟DOM对象,内置对象,将其理解为DOM组件应该更为贴切。因此,React框架将ReactDOM称为虚拟DOM。

React的渲染机制

React框架之所以大受欢迎, 其特有的渲染机制是非常重要的因素之一。既然提到React 渲染机制, 那么就说一说Diff算法, 该算法是支撑React渲染机制的核心技术之一。

Diff算法的核心就是扫描DOM树,通过扫描找到DOM树前后的差异。若DOM树的状态或属性发生改变,React会构建新的DOM树,将新的DOM树和原来的DOM树进行比较,找到树中变化的部分进行修改。好处是避免重复的频繁的操作DOM,提高页面的访问性能。

React的设计思路

ui编程痛点

  • 状态更新,ui不会自动更新,需要手动地调动DOM进行更新
  • 欠缺基本的代码层面的封装和隔离,代码层面没有组件化
  • UI之间的数据依赖关系,需要手动维护,如果依赖链路长,则会遇到“Callback Hell”

响应式编程

  • 状态更新,ui自动更新
  • 前端代码组件化,可复用,可封装
  • 状态之间的互相依赖关系,只需声明即可

组件化

  • 组件是组件的组合/原子组件
  • 组件内拥有状态,外部不可见
  • 父组件可将状态传入组件内部
  • 组件内部拥有私有状态State
  • 组件接受外部的Props状态提供复用性
  • 根据当前的State/Props,返回一个UI

组件化设计

  • 组件声明了状态和UI的映射
  • 组件有Props/State两种状态
  • 组件可由其他组件拼装而成