Coursera 笔记

Module 03 · In-depth Understanding of Advanced React Functionality深入理解 React 高级功能

Binding Redux and Flow绑定 Redux 与数据流

Coursera ↗

欢迎观看本视频!观看完后,您将能够:

  • 解释 状态变化 的概念
  • 描述 Redux 中的数据流
  • 列举 单向数据流 在 Redux 中的优势

组件状态与状态变化

在 React 应用程序中,状态用于存储组件的属性。当组件的状态发生变化时,React 会通过触发 DOM(文档对象模型) 重新渲染来响应这些变化。随着应用程序的扩展,管理状态变得越来越困难,状态变化可能涉及组件之间的数据传输和一长串的 props,这往往会导致应用程序代码复杂化。


Redux 的解决方案

Redux 提供了一个开源的 JavaScript 库,用来管理应用程序的状态。它通常与 ReactJS 一起使用,但也可以与其他 JavaScript 库如 Angular 配合使用。Redux 通过提供一个 单一的状态存储 来简化代码,使状态更新变得更加容易。

React-Redux 应用的基本结构:

  1. 中央 Store:存储应用的状态树(state tree)。
  2. Action:包含类型(type)和有效载荷(payload)的信息包,用于传递数据。
  3. Reducer:接收旧的状态和 Action,并返回更新后的状态。
  4. Subscription:当状态更新时触发,通知组件获取新状态并重新渲染。

Redux 中的数据流

数据流方向:单向流

在 React-Redux 应用程序中,数据流是 单向的,即数据始终沿着一个方向流动。数据流的过程如下:

  1. 用户与 UI 交互,触发组件中的 Action Creator 调用。
  2. Action 被派发到 Redux Store。
  3. Root Reducer 处理 Action,将其传递给应用中的所有其他 Reducer。
  4. Reducer 判断是否需要根据 Action 更新状态,通常通过一个 switch 语句 来过滤所需的 Action。
  5. 如果 Action 类型匹配,Reducer 会返回一个新的状态(而非修改旧状态),并将其传递给 Store。
  6. Store 更新状态后,通知相关组件获取新状态,并触发重新渲染。

重要提示:在 Redux 中,状态不会直接改变。每次状态变化时,Reducer 会生成一个 新的状态,它是旧状态的副本,并对其进行了修改。


单向数据流的优势

单向数据流 vs 双向数据流

早期开发者常用 双向绑定 来更改状态数据,以便 UI 反映出这些变化。Angular 和 Ember 等强大框架采用了双向绑定,但随着应用程序规模的扩大,双向绑定开始对浏览器性能产生不利影响,并且很难追踪数据流的变化。

单向数据流的优势

在 单向数据流 的模式下,通过构建 展示组件 和将它们包装在 容器 或 store 中(如在 Redux 应用程序中),能够有效解决这一问题。其优势包括:

  • 易于管理大型应用:尤其是在前端重度的 Web 应用中,单向数据流让状态管理变得更加简单。
  • UI 操作与状态更新分离:UI 上的操作(如点击按钮)与由于这些操作引起的状态变化和更新相分离,简化了状态管理。
  • 跨平台开发:React Native 使得我们能够快速创建适用于 iOS 和 Android 的应用程序,组件、Action 和 Reducer 可以在这些平台间共享使用。尽管在不同平台上会有一些视图组件的变化,但整体架构保持一致。

总结

在本视频中,您学习了以下内容:

  • 当 组件的状态 发生变化时,React 会触发 DOM 的重新渲染。
  • Redux 中参与更新组件属性的元素包括:中央 Store、Action、Reducer 和 Subscription。
  • React-Redux 应用中的数据流是 单向的。
  • 当 UI 操作 与 状态变化 分离时,管理状态会变得更加容易。