返回

如何封装自己的useRequest hooks

前端

前言

在前后端分离的项目中,我们经常需要通过异步请求去获取数据。在这个异步请求的过程中,我们需要做特别多的处理,例如:展示loading,表示正在请求数据;每个异步操作都需要使用try-catch捕获错误。为了简化这些操作,我们可以使用自定义Hooks来封装这些逻辑。

使用useRequest hooks

首先,我们需要安装useRequest库:

npm install use-request

然后,在项目中创建一个名为useRequest.js的文件,并添加以下代码:

import { useState, useEffect } from "react";
import useRequest from "use-request";

const useRequest = (request, options) => {
  const [data, setData] = useState(null);
  const [error, setError] = useState(null);
  const [loading, setLoading] = useState(false);

  useEffect(() => {
    setLoading(true);
    request(options)
      .then((res) => {
        setData(res.data);
      })
      .catch((err) => {
        setError(err);
      })
      .finally(() => {
        setLoading(false);
      });
  }, [request, options]);

  return { data, error, loading };
};

export default useRequest;

这个Hooks接受两个参数:一个request函数和一个options对象。request函数是我们要发起的请求,options对象是请求的配置选项。

使用示例

现在,我们可以在组件中使用useRequest hooks来发起请求:

import useRequest from "./useRequest";

const MyComponent = () => {
  const { data, error, loading } = useRequest(fetch, {
    url: "https://example.com/api/v1/users",
  });

  if (loading) {
    return <div>Loading...</div>;
  }

  if (error) {
    return <div>Error: {error.message}</div>;
  }

  return (
    <ul>
      {data.map((user) => (
        <li key={user.id}>{user.name}</li>
      ))}
    </ul>
  );
};

export default MyComponent;

在这个示例中,我们使用useRequest hooks来发起一个GET请求,请求的URL是“https://example.com/api/v1/users”。如果请求成功,我们将在组件中渲染一个列表,其中包含从API获取到的用户数据。如果请求失败,我们将渲染一个错误消息。

总结

useRequest hooks可以帮助我们简化异步请求的处理过程。它可以自动处理loading和错误状态,并让我们专注于业务逻辑。