npm 包 @ahooksjs/use-request 使用教程

阅读时长 10 分钟读完

在前端开发中,我们经常需要向后端请求数据,而且请求数据的过程,我们经常需要做一些额外的工作,比如 loading 状态的展示,异常处理等等。一个好用的 React Hook@ahooksjs/use-request 可以帮助我们简化这些工作。

@ahooksjs/use-request 是什么?

@ahooksjs/use-request 是 Ant Design 团队推出的请求数据 React Hook 库,它为我们提供了请求数据时需要的一些操作,减少开发者处理请求数据时的重复代码。它包含了以下特性:

  1. 自动触发请求和缓存。
  2. 提供了多种状态,包括 loading, error, success, 以及原始 async/await 结果。
  3. 可以简化异常处理。
  4. 支持 GET,POST, PUT, DELETE 请求方法。
  5. 支持请求前/后的拦截器。
  6. 支持请求 debounce 和 throttle。

如何安装 @ahooksjs/use-request?

你可以使用以下命令来安装 @ahooksjs/use-request

或者使用 yarn

如何使用 @ahooksjs/use-request?

在使用 @ahooksjs/use-request 时,我们需要先获取数据所在的 url 地址。这里,我们使用 jsonplaceholder 提供的 API 作为我们的数据源。

我们可以使用以下代码来获取 post 列表:

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

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

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

这里,我们使用了 useRequest hook 来获取数据,该 hook 接收一个 url 地址作为它的参数。我们可以通过 loadingerror 来检查请求是否已经完成。如果请求仍在进行中,我们会显示 loading 的状态;如果请求失败,我们会显示 error 的状态。

一旦数据获取完成,我们将在页面上渲染所有的 post 列表。

如何添加请求参数?

如果我们需要传递参数,我们可以将 url 地址变为一个函数,以便我们传递请求参数:

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

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

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

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

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

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

在上面的代码中,我们使用 useState hook 定义了当前的 postId 状态,然后在调用 useRequest hook 时,将 url 改变为一个函数,并在函数中使用 postId 变量作为请求参数。在页面上展示时,我们只需要在 input 中修改 postId 状态,useRequest hook 将自动使用新的参数来发起请求。

如何处理请求参数错误?

如果我们提供了错误的参数,请求数据将会失败。使用 useRequest hook,我们可以捕捉请求参数错误并展示错误信息:

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

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

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

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

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

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

我们将 postId 的值设置为 invalid,请求数据时会触发错误。当数据请求失败时,error 对象将包含错误的详细信息。在页面上,我们只需要使用 error.message 来展示错误信息即可。

如何添加拦截器?

如果我们需要在请求或者响应前添加一些操作,我们可以使用 useRequest hook 提供的拦截器来实现:

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

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

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

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

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

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

在上面的代码中,我们定义了一个 handleBeforeRequest 函数作为请求拦截器,并在调用 useRequest hook 时,使用 interceptors 设置拦截器配置。在我们的示例中,handleBeforeRequest 函数将在请求发起前输出请求的地址和请求选项。每次请求时,它将打印以下信息:

如何添加 debounce 和 throttle?

如果我们需要防止请求过多数据时过于频繁请求返回数据,我们可以使用 useRequest hook 提供的 debouncethrottle 来进行控制:

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

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

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

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

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

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

在上面的代码中,我们使用了 pollingIntervalthrottleInterval 配置对象来控制数据的请求时间间隔。我们使用了 debounce 来定义请求的间隔,如果在间隔内执行的请求将被丢弃。如果使用 throttle,则每隔一段时间会执行一次请求。

结论

@ahooksjs/use-request 提供了很多方式来帮助我们更好、更简单地处理数据请求。 我们可以使用 useRequest hook 来快速地发起请求,处理异常和错误信息,使用拦截器和防抖等来优化我们的应用。 使用这个库,我们可以大大减少在数据请求时的代码量,并提高代码的可维护性和可读性。

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

纠错
反馈