npm 包 redux-api-isomorphic-fetch-middleware 使用教程

阅读时长 13 分钟读完

前言

在进行前端项目开发时,我们经常涉及到发送异步请求获取数据,而 Redux 是现代化前端应用常用的状态管理工具,为了更方便的在 Redux 中处理异步请求,我们可以使用 redux-api-isomorphic-fetch-middleware 这个 npm 包。

简介

redux-api-isomorphic-fetch-middleware 是一个 Redux 中间件,充分利用了基于 fetch API 的 isomorphic-fetch 库。它简化了 Redux 应用程序中的异步数据获取方案,并允许在服务端和客户端上执行相同的代码。此外,redux-api-isomorphic-fetch-middleware 还可以处理多个请求。

安装

你可以通过 npm 包管理工具来安装 redux-api-isomorphic-fetch-middleware。

使用

首先,在你的 Redux createStore() 调用中,你需要对 redux-api-isomorphic-fetch-middleware 进行配置。

现在,你就可以在你的 Redux actions 中使用带有 isomorphic-fetch 的 redux-api-isomorphic-fetch-middleware 了。在你的 Redux action 中创建一个 API 对象,并将其作为第一个参数传递给 fetch() 函数。此外,你还需要指定此操作成功或失败时要调用的动作类型。

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

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

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

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

每个 API 对象都由一个 endpoint 和 (optional) method 的属性值组成。你也可以在 API 中包含其它的属性,例如 headers 或 body。

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

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

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

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

服务端渲染

redux-api-isomorphic-fetch-middleware 在服务器上也可以正常工作,服务器上的 API 调用将返回 Promise,客户端上的 API 调用则将在组件加载时自动执行。

首先,在你的服务器渲染代码中禁用自动执行 API 调用,并将 API 调用返回的 Promise 传递给模板文件以在客户端加载时执行。

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

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

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

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

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

在客户端,你需要手动将你的 API 动作调用注入到组件挂载时调用的 componentDidMount() 函数中。

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

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

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

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

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

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

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

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

处理异步请求

在应用中同时发起多个异步请求是非常常见的,redux-api-isomorphic-fetch-middleware 可以很好地处理这方面的需求。只需使用逗号分隔即可。如:

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

这里,我们同时为一个名为 MANAGE_USER 的请求和一个名为 MANAGE_PRODUCTS 的请求创建了两个不同 API 对象。使用这些请求就像正常操作一样简单,只需在接受 API 对象参数的函数中指定 MANAGE_USER 或 MANAGE_PRODUCTS。

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

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

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

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

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

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

示例

最后,下面为大家展示一个完整的示例代码:

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

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

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

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

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

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

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

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

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

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

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

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

结论

在本文中,我们介绍了 redux-api-isomorphic-fetch-middleware 中的使用和必要配置。同时,我们也展示了如何在客户端和服务端共享管理数据存储器,以提高应用的性能和用户体验,从而帮助你更好地完成你的项目。希望本文可以对你有所帮助。

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

纠错
反馈