Redux 异步 Action 方案及实践

阅读时长 6 分钟读完

Redux 是一个流行的 JavaScript 应用程序状态管理库,它使用单一不可变状态(global state)来管理一个应用程序的状态。Redux 库提供了一个简单、预测性的数据流方案,轻松解决了应用程序状态管理的复杂性问题。但 Redux 默认不支持异步 Actions,这导致开发者不得不使用一些第三方中间件来支持异步 Actions。本文将带你深入了解 Redux 异步 Action 的方案及实践。

Redux 异步 Action

在 Redux 应用中,每个 Action 是一个纯 JavaScript 对象,用来描述一个刻板的应用状态变化。Redux 支持三种不同 Action 类型:同步、异步和 Promise。

在 Redux 中,异步 Actions 使用 Thunk 中间件进行处理,而 Thunk 写起来比较麻烦,因此 Redux 库的作者 Dan Abramov 在 Redux 2.0 中引入了 redux-thunk 中间件来简化异步 Actions 的处理。

redux-thunk 中间件使用一个特殊的 Action Creator 函数来处理异步 Actions。这个特殊的 Action Creator 函数返回一个函数,这个函数执行异步操作并返回另一个 Action Creator 函数。这个 Action Creator 函数被 Redux Store 安排为下一个 Action,可以异步地更新 Store 中的状态。

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

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

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

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

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

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

Redux Saga 异步处理方案

redux-thunk 中间件虽然简洁易用,但也不够直观和强大。redux-saga 中间件则是更加可读可编写的 Redux 异步方案,并且使用起来也很流畅。

Redux Saga 是一个 Redux 中间件,它提供了一种简单但功能强大的方式来处理 Redux Action 的异步调用。Saga 是一个 Generator 函数,包含一些特殊的巨集函数(effects)来执行异步操作,或者等待 Redux Actions,并对其进行拦截和控制。实际上,Saga 是另一个事件循环,当 Redux Action 被触发时,Saga 接收到 Action 并响应,调用函数将 Action 转化为 State。

以下是一个使用 redux-saga 中间件的示例:

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

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

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

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

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

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

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

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

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

Redux Thunk 和 Redux Saga 对比

redux-thunk 中间件虽然在解决异步 Action 问题上比较成熟,但是它有些缺点:1)Thunk Action Creator 函数的写作方式有点麻烦;2)Thunk Action Creator 函数只能处理简单的异步 Action;3)Thunk Action Creator 函数不是 Generator 函数,所以无法使用 try…catch...finally 来处理错误。

相比之下,Redux Saga 更加直观和易于编写,它支持 Generator 函数,具有更好的容错机制,可以处理各种复杂的异步 Action。但是,Redux Saga 的学习成本比较高,需要掌握 Generator 函数和分布式软件架构的基本原理。

总结

Redux 的状态管理方案在实践中已被广泛使用。在异步处理方面,Redux 使用 redux-thunkredux-saga 中间件,两者都支持基本的异步 Action,但在易用性、可读性、可扩展性等方面存在一些差异。开发者在实际项目中应该根据需求选择合适的方案。

参考

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/644f90bf980a9b385b8fd473

纠错
反馈