📜  ReactJS 中的 Redux 和 Flux 有什么区别?(1)

📅  最后修改于: 2023-12-03 15:34:40.988000             🧑  作者: Mango

ReactJS 中的 Redux 和 Flux 有什么区别?

ReactJS 是当前最流行的前端框架之一,Redux 和 Flux 是 ReactJS 中高效的状态管理工具。但是 Redux 和 Flux 之间并不是同一种东西,下面我们来了解一下它们的区别。

Flux

Flux 是 Facebook 在 2014 年发布的一种架构模式,它的基本概念是“单向数据流”,数据从 dispatcher 流向 stores,然后通过 ReactJS 组件展示给用户,用户的行为再触发新的 action,形成一个循环。相比传统的 MVC 模式,Flux 在数据流动方面强调了一定的规范。

Flux 的工作原理如下:

  1. Action:定义了一些事件,在 React 组件中通过 ActionCreator 的方式调用定义好的事件,然后将事件派发给 Dispatcher。
  2. Dispatcher:负责 Action 的分发,将所有的 Action 按顺序派发给注册的 Callbacks。
  3. Store:存储了应用程序的数据,接收来自 Dispatcher 分发过来的 Action,更新 Store 中的状态,通知注册的 View 更新状态,并渲染新的 UI。

Flux 状态管理的核心是 Dispatcher 和 Store,Store 负责数据的存储和更新,而 Dispatcher 负责事件的分发。

Redux

Redux 是 Dan Abramov 在 2015 年发布的另一种状态管理工具,它是基于 Flux 的思想之上,进一步精简了 Flux 的概念,解决了 Flux 的一些问题,如 Store 之间的依赖管理、异步数据等问题。

Redux 的工作原理如下:

  1. Action:在 React 组件中通过 ActionCreator 的方式定义好事件,派发到 Store。
  2. Store:收到 Action 后,更新 Store 中的状态,并通过 Listener 通知 React 组件进行 UI 渲染。
  3. View:根据接收到的 State,更新 UI。

Redux 的状态管理基于 Store 和 Action,Reducer 作为 Store 的一个纯函数来管理状态。

区别
  1. 不同的设计思想:Flux 采用一种拆分的方式来管理状态,而 Redux 采用了一种组合的方式来管理状态。Flux 认为单一的 Store 对象不足以表示复杂应用程序的状态,因此它采用多个 Store 对象来管理复杂的应用程序。而 Redux 认为 Store 对象足以管理应用程序的状态,因此它采用了一个 Store 对象来管理状态。
  2. 同步/异步数据:在 Flux 中,数据是同步的,当 Store 更新它的状态时,它会立即通知监听它的 View 更新 UI。而在 Redux 中,则可以对数据进行异步操作,这些异步操作可以通过 Middleware 实现。
  3. 数据变化方式:Flux 的操作是直接对 Store 的状态进行操作,而 Redux 则是通过 Reducer 纯函数来管理状态,在 Redux 中,Actions 只是定义了操作的类型和一些参数,Reducer 则是根据这些 Actions 和 State 来计算出新的 State。

综上所述,Redux 相对于 Flux 要更加精简和易使用,并且 Redux 还提供了异步数据操作和中间件机制。但是在一些大型复杂的应用程序中,Flux 的多个 Store 对象的设计方式能够更好地应对不同的数据需求,因此需要根据具体的需求选择适合的状态管理工具。