React框架基本概念入门

62 阅读3分钟

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

UI编程痛点

状态更新困难

状态更新,UI不会自动更新,需要手动地调用DOM进行更新。

组件化程度低

欠缺基本的代码层面的封装和隔离,代码层面没有组件化。

依赖关系复杂

UI之间的数据依赖关系,需要手动维护,如果依赖链路长,则会遇到“Callback Hell”。

响应式系统

响应式系统需要具备这些特征:及时响应性、恢复性、有弹性以及消息驱动。我们把具有上面四个特性的系统就叫做响应式系统。

上面的四个特性中,及时响应性是系统最终要达到的目标,恢复性和有弹性是系统的表现形式,而消息驱动则是系统构建的手段。

image.png

组件化

组件化是指解耦复杂系统时将多个功能模块拆分、重组的过程,有多种属性、状态反映其内部特性。把复杂系统拆分成多个组件,分离组件边界和责任,便于独立升级和维护。

组件化编程总结如下:

  1. 组件是组件的组合/原子组件
  2. 组件内拥有状态,外部不可见
  3. 父组件可将状态传入组件内部

示例代码

以下代码很好地体现了React声明式编程和函数式编程的特点:

import React, { useState, useEffect } from 'react '
function Example () {
  const [count, setCount] = useState(0)
  // Similar to componentDidMount and componentDidUpdate:
  useEffect(() => {
    // Update the document title using the browser API
    document.title = `You clicked ${count}times`
  })

  return (
    <div>
      <p>You clicked {count} times</p>
      <button onclick={() => setCount(count + 1)}>
        click me
      </button>
    </div>
  )
}

Virtual DOM(虚拟DOM)

Virtual DOM是一种用于和真实DOM同步,而在JS内存中维护的一个对象,它具有和DOM类似的树状结构,并和DOM可以建立一一对应的关系。

它赋予了React声明式的API:您告诉React希望让U是什么状态,React就确保DOM匹配该状态。这使您可以从属性操作、事件处理和手动DOM更新这些在构建应用程序时必要的操作中解放出来。

React与Vue比较

相同之处

  1. 虚拟 DOM。映射真实 DOM,通过新旧 DOM 的 diff 对比,更好的跟踪渲染页面。
  2. 组件化。将应用拆分成一个个功能明确的模块,每个模块之间可以通过合适的方式互相联系。
  3. 构建工具。都有自己的构建工具,通过 Webpack + Babel 去搭建脚手架。
  4. Chrome 开发工具。两者都有很好的 Chrome 扩展去帮助查找 Bug。
  5. 配套框架。Vue 有 Vue-router 和 Vuex,而 React 有 React-router 和 React-Redux

不同之处

  1. 模板 VS JSX。Vue 推荐编写近似常规 HTML 的模板进行渲染,而 React 推荐 JSX 的书写方式。
  2. 监听数据变化的不同。Vue 使用的是可变数据,而 React 更强调数据的不可变。在 Vue 中通过 v-model 绑定的数据,用户改变输入值后对应的值也相应改变。而 React 需要通过 setState 进行设置变化。
  3. Diff 不同。Vue 通过双向链表实现边对比边更新 DOM,而 React 通过 Diff 队列保存需要更新的 DOM,得到 patch 树,再统一批量更新 DOM。
  4. 开发团队。Vue 一开始核心就是 Evan You,后面再招了其他人组成团队;React 的话是一开始就是 Facebook 团队搞的。所以网上的人比对源码情况的话,Vue 的比 React 的简单易懂点。