从框架的角度去了解 Redux 与 Flux 的区别

面试官:小伙子,你的数组去重方式惊艳到我了

在前端开发中,管理应用程序状态是一个非常关键的问题。随着应用程序规模的增长,你将逐渐发现,难以维护、修改和测试应用程序状态变得越来越困难。Redux 和 Flux 都是解决这个问题的库,它们通过数据流的方式去管理应用程序的状态,并且能够使其可预测、易于扩展和测试。那么 Redux 和 Flux 有什么区别呢?在本文中,我们将从框架的角度来了解它们的区别,帮助你更好地理解和选择这两种库。

关于 Flux

Flux 是一个由 Facebook 提出的一种状态管理模式。在 Flux 中,数据流是单向的,它由三部分组成:Dispatcher(调度器)、Store(数据存储器)、View(视图)。Dispatcher 是数据流的控制中心,它负责将数据发送到 Store 中。Store 存储所有的应用程序状态,当 Dispatcher 把数据发送到 Store 时,Store 将保存新的数据并向 View 发送事件,以通知 View 更新自身。View 是应用程序中的表示层,它通常是用 React 来实现的。

在 Flux 中,一个应用程序可能有多个 Store,每个 Store 负责维护应用程序的一个特定部分的状态。一个 Store 可以由多个 View 注册,当 Store 中的状态改变时,它会向注册的 View 发送事件,以通知它们更新自身。一个 Store 可以接收多个 Action,但是它只能有一种响应 Action 的方式。这使得在应用程序中管理状态变得更加可预测和简单。

下面是 Flux 的代码示例:

-- --------
------ - ------------ - ---- ---------
------ ---------- ---- ---------------

----- ----- - -
  -- ----
  ------ ---

  -- ----
  ------------------ -
    ---------- - - -------------- ----------- --
    --------------------
  --

  -- ----
  ---------- -
    ------ -----------
  --

  -- ------
  --------------------- -
    -------------------------- ----------
  --

  -- --------
  ------------------------ -
    ----------------------------- ----------
  --

  -- --------
  -------------------- -
    -- --------------
    ------------------- -
      ---- -----------
        --------------- ----- -------------- ---
        ------
      ---- ----------
        --------------- ---- -------------- ---
        ------
      --------
        ------
    -
  -
-

-- -------
----------------------------------------------------

------ ------- ------

关于 Redux

Redux 是一个由 Dan Abramov 提出的状态管理库,它是基于 Flux 思想而设计的。与 Flux 类似,Redux 也是通过数据流的方式去管理应用程序的状态,但它只有一个 Store,将所有的状态存储在一个 state 对象中。当一个 Action 被触发时,它将被传递到 Reducer 中进行处理,在 Reducer 中,根据 Action 的类型对应处理应用程序的状态,并将新的状态返回给 Store,更新 Store 中的 state 对象。当 state 发生变化时,Store 会通知 View 更新自身。

与 Flux 不同的是,Redux 只有一个 Store,这意味着在 Redux 中,维护应用程序状态的逻辑更加简单和可预测。此外,在 Redux 中,Action 是一个普通的 JavaScript 对象,它不仅仅承载着应用程序状态的更新,还可能携带其他的数据和信息,使得我们可以在 Reducer 中处理更加丰富和复杂的逻辑。

下面是 Redux 的代码示例:

-- ----------
----- ------- - ------- ------- -- -
  ------------------- -
    ---- -----------
      ------ - --------- ----- -------------- --
    ---- ----------
      ------ - --------- ---- -------------- --
    --------
      ------ ------
  -
-

------ ------- --------
-- --------
------ - ----------- - ---- --------
------ ------- ---- ------------

----- ----- - -------------------- ----

------ ------- ------

Redux 与 Flux 的区别

可以看出,Redux 与 Flux 有很多相似之处,但它们之间也有着一些区别。下面是一些关键的区别:

1. 单一 Store 与多 Store

Flux 中可以有多个 Store,每个 Store 都对应一个特定的部分状态。而在 Redux 中,只有一个 Store,将所有的状态保存在一个 state 对象中。这使得在 Redux 中维护应用程序状态更加简单和可预测。

2. Action 的变化

在 Flux 中,Action 是一个简单的 JavaScript 对象,只包含一个类型和一个可选的负载。而在 Redux 中,Action 同样是一个 JavaScript 对象,但它可以包含任何类型的数据,因此在 Reducer 中可以处理更加丰富和复杂的逻辑。

3. 纯函数与回调函数

Flux Store 中处理 Action 的方式通常是将回调函数作为参数传入 Store,当 Store 接收到 Action 时立即调用回调函数进行处理。而在 Redux 中,Reducer 必须是一个纯函数,它接收当前状态和 Action 作为参数,并根据 Action 的类型返回新的状态。这意味着在 Redux 中,状态更新的方式更加清晰和可预测,更容易进行测试和调试。

结论

Redux 和 Flux 都是优秀的状态管理库,它们都在不同程度上抽象了应用程序状态的管理和处理,使得我们在应用程序中管理状态更加简单和可预测。通过理解它们之间的区别,我们可以更好地选择适合我们应用程序的库。

在选择 Redux 和 Flux 时,我们应该根据应用程序规模和需求来选择,如果我们的应用程序状态比较简单且规模不大,我们可以选择使用 Flux;如果状态比较复杂或者规模较大,我们可以选择使用 Redux。无论我们选择哪种库,我们都应该遵循它们的原则,将应用程序状态的管理和处理抽象出来,使其更加清晰和可预测。

希望这篇文章能够帮助你了解 Redux 和 Flux 的区别,从框架的角度去理解它们的本质,并为你的开发工作提供帮助。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/66fd12dd4471362601777efd


猜你喜欢

  • 前后端一体化开发必须知道的性能优化策略

    在前后端一体化开发中,性能优化是一个非常重要的主题。随着用户对网站和应用程序的需求不断增长,我们不得不采取各种方法来提高性能和响应速度。在本文中,我们将介绍一些前后端一体化开发中必须了解的性能优化策略...

    17 天前
  • 在 React/Redux 中使用 Axios 处理 Ajax 请求

    在现代 Web 应用中,Ajax 技术已经成为了一个必要的技能。在前端开发中,我们通常使用 Axios 库来处理 Ajax 请求,因为它是一个功能强大、易于使用的 JavaScript 库。

    17 天前
  • TypeScript 中如何使用命名空间提高代码的组织性?

    命名空间是 TypeScript 中一种重要的组织代码的方式,可以将代码分组并避免全局命名冲突,同时提高代码的可读性和维护性。本文将介绍命名空间的基本概念和使用方法,并提供实际示例,帮助读者深入了解 ...

    17 天前
  • 从 Express.js 迁移到 Koa.js:Node.js Web 框架比较

    从 Express.js 迁移到 Koa.js:Node.js Web 框架比较 Node.js 是一个非常流行的服务器端 JavaScript 运行环境,它有很多优秀的 Web 框架供选择。

    17 天前
  • webpack4 之路:升级过程中遇到的坑

    随着前端技术的不断发展,webpack 作为前端打包工具也随之发展并不断推出新版本。webpack 4 是其中的一个比较重要的版本,它带来了更好的性能和更好的处理方式,包括缓存和 Tree Shaki...

    17 天前
  • 使用 Jest 进行全栈应用测试的实践方案

    在现代 Web 应用中,前端和后端的交互愈发复杂,为了保证应用的正确性和稳定性,我们需要对它们进行全方位的测试。Jest 是一个广泛应用于 JavaScript 应用的测试框架和断言库,它是由 Fac...

    17 天前
  • 如何在 Chai 中集成第三方测试工具和插件

    简介 Chai 是一个用于 JavaScript 测试的断言库,它让我们可以编写易于阅读和维护的测试。Chai 可以与许多其他测试工具和插件集成,这使得它变得更加强大和灵活。

    17 天前
  • Vue.js 与 Bootstrap 集成实践:如何快速搭建页面

    前言 Vue.js 是一个用于构建用户界面的渐进式框架,能够很好地处理复杂的交互逻辑。Bootstrap 是一个流行的前端 UI 框架,包含了大量的 CSS 样式和 JavaScript 插件,可以快...

    17 天前
  • 如何使用 CSS Reset 解决 z-index 层次问题?

    什么是 z-index? 在 CSS 中,z-index 属性用于控制元素在层叠上下文(stacking context)中的显示顺序,也就是所谓的“层次”或“叠层次序”。

    17 天前
  • Node.js 中的推送通知技术及其应用实例

    在 Web 应用程序中,推送通知是将实时信息传递到客户端的一种方法,它可以在后端服务器或第三方推送服务提供商的帮助下完成。Node.js 是一种强大的后端平台,提供了许多用于应用程序的推送通知技术。

    17 天前
  • ECMAScript 2017 的新特性:Async Iteration 的使用方法

    在 ECMAScript 2017 中,我们迎来了一项新特性,Async Iteration(即“异步迭代”),它是一种在异步操作中使用迭代器(Iterator)的方法。

    17 天前
  • 如何测试 GraphQL API

    GraphQL 是一种新型的 API 查询语言,它允许开发者请求和返回所需的数据,而不需要像传统的 RESTful API 那样收到不必要的数据。然而,由于 GraphQL 的灵活性和动态性,测试 G...

    17 天前
  • 使用 Docker 和 Nginx 搭建 Node.js 应用

    使用 Docker 和 Nginx 搭建 Node.js 应用 在现代 Web 应用开发中,Docker 已经成为了一个必要的工具。Docker 是一个容器化技术,可以将整个应用程序打包到一个可移植的...

    17 天前
  • CSS Grid 如何取舍 “使用场景” 或 “适用范围”

    在前端开发中,布局一直是最基础也是最核心的一部分。在 CSS 中,我们用过很多布局方法,比如使用浮动实现多列布局,使用弹性盒子实现对齐等等。而在 CSS3 中,CSS Grid 布局成为了一种新的布局...

    17 天前
  • Deno 应用中常见的 SQL 注入错误及解决方法

    前言 SQL 注入是一个经典的安全问题,它存在于几乎所有 Web 应用中,也特别容易出现在基于 Deno 的后台应用程序中。本文将讨论 Deno 应用程序中常见的 SQL 注入错误,以及如何防止它们出...

    17 天前
  • 如何在 Mocha 测试中测试 redux reducer 的方法?

    在前端应用开发中,Redux 已经成为了一个流行的状态管理工具。然而,Redux 的 reducer 函数需要经常保证其正确性,这就需要有一个好的测试框架来确保 reducer 编写正确。

    17 天前
  • ES9 中 Reflect.ownKeys() 的详细用法

    在 ES9 中加入了一个新的方法 Reflect.ownKeys(),该方法可以用于获取一个对象所有的属性,包括 Symbol 类型的属性。这个方法可以帮助我们更方便地操作对象属性,同时也增强了代码的...

    17 天前
  • 在 React Native 中使用 Redux 构建电商应用

    React Native 是一个跨平台的框架,可以同时为 iOS 和 Android 创建本机应用。Redux 是一个流行的状态管理库,它可以更好地处理数据流,并简化代码的管理。

    17 天前
  • 在 Web 应用程序中使用 Fastify 和 GraphQL

    在 Web 应用程序中使用 Fastify 和 GraphQL Fastify 是一个快速和低开销的 Node.js web 框架,非常适合构建高性能的 Web 应用程序。

    17 天前
  • 如何在 React 中使用异步函数以及 ES2020 异步函数的优化

    如何在 React 中使用异步函数以及 ES2020 异步函数的优化 前言 在现代前端开发中,异步编程是不可避免的一个主题。React 作为当今最流行的前端框架,对于异步编程的支持也非常友好,同时 E...

    17 天前

相关推荐

    暂无文章