以四个点来解答 - 破题

  • 讲 - 讲概念
    • 用简洁的话说明是什么,最好用一句话来描述
  • 说 - 说用途
    • 说出该技术的用途,能够结合具体的适合场景,拓展性地描述
  • 理 - 理思路
    • 梳理该技术的核心思路或运作流程,可深可浅,如果有足够深的了解建议详细展开说明
  • 列 - 优缺点,列一遍

    • 对该技术栈的优缺点进行列举
    • 列举时与其它方案横向对比的过程,切勿踩一捧一以引向面试官反感

      采用非线性的结构化械阐述答案

      image.png

      讲概念 - 本质

      React 是一个网页的 UI 框架

      从历史

      React 诞生于 jQuery、AngularJS、Backbone.js 相对流行的年代
  • jQuery 诞生于 2005 年,浏览器兼容性是当时最大的问题

    • 提供封装 DOM 操作,提供样式选择器,封装 Ajax 操作,封装链式操作,大量基础函数等
    • 甚至不能称之为框架,本质上它只是一个工具函数合集
      image.png
    • 并没有一个模式的东西,将这些原料有序地组合在一起

如何组织 代码结构,如何有效提升复用率,开始成为大家亟待解决的问题

  • 2009年 AngularJS 横空出世
    • 提供了一揽子全家桶解决方案
    • 从底层开始深度封装,向上提供了路由、双向绑定、指令、组件等框架特性
      image.png
    • jQuery 时代是与浏览器斗争
      AngularJS 时代,更像是与 AngularJS 斗争
    • 更像是披着前端皮的后端框架
    • 这值得吗?
      AngularJS 的双向绑定就是当时最大的特色

如果希望代码有序地组织起来,又不想陷入 Angular.js 无穷无尽的概念中,Backbone.js 就是一个很好的选择

  • 没有像 Angular 带来大量概念,并考虑两个点:
    1. 前代的亲和性
    2. 考虑了代码的组织性

image.png
选择 Backbone.js 是因为前端工程化的成足够对低

  1. 学习成本
  2. 迁移成本

讲概念

前端工程化的发展其实是围绕着这两个问题

  • 与后端不同的是前端主要以 UI 组件为基础,需要一个可以使组件利用的开发方案
  • 前端工程越来越庞杂,组件作为基本单位,应该是可以通过编写单元测试来维持稳定性

开发 React 的思维模式完全不同,概念也极为简单
image.png
React 中只有组件,没有页面,没有控制器,也没用模型
image.png
fn 可能是一个类组件,也可能是纯函数组件也可能在函数中产生影响 UI 生成的副作用。

只关注两样东西

  • 数据
  • 组件

构建 UI 视图时,组合组件始终是最优的解决方案

说用途

React 的用途当然是构建视图。由于 React 虚拟 DOM 的关系,在适用场景上远比传统框架更为广泛。

  • 无论是 PC 网页还是移动端都完全支持
  • 由于 RN 可以用于开发 iOS 与 Android 应用
  • React 360 可以开发 VR 应用
  • 冷门的 ink, 可以使用 React 开发命令行应用

    理思路

    React 的核心思路是、
  1. 声明式
    • 声明式编程的优势在于直观,可以做到一目了然,也便于组合
      image.png
  2. 组件化
    • 组件化可以降低系统间功能的耦合性,提高功能内部的聚合性
  3. 通用性
    • React 将 DOM 抽象为虚拟 DOM,开发都并不会直接操作 DOM,使得 React 不再局限于 Web 开发而能走向更宽广的平台

      优缺点

  • 声明式、 组件化与通用性
  • React 并不是一个一揽子框架,导致在技术选型与学习使用上有比较高的成本

答题

React 是一个网页 UI 框架,通过组件化的方式解决视图层开发复用的问题,本质是一个组件化框架。

它的核心设计思路有三点,分别是声明式、组件化和通用性。
声明式的优势在于直观与组合。
组件化的优势在于视图的拆分与模块的复用,可以更容易做到高内聚低耦合。
通用性在于一次学习,随处编写。比如 React Native,React 360 等,这里主要靠虚拟 DOM 来保证实现。
这使得 React 的适用范围变得足够广,无论是 Web、Native、VR,甚至 Shell 应用都可以进行开始。这也是 React 的优势。

但作为一个视图层的框架,React 的劣势也十分明显。它并没有提供完整的一揽子解决方案,在开发大型前端应用时,需要向社区寻找并整合解决方案。虽然 一定程度上促进了社区的繁荣,但也为开发都在技术选型和学习适用上造成了一定的成本。

  • 承接在优势后,可以再谈一下自己对于 React 优化的看法,对虚拟 DOM 的看法
  • 向自己主导过的 React 项目上引导,谈谈 React 相关工程架构与设计模式