登录
首页 >  文章 >  前端

用于 Api 调用的自定义钩子(Reactjs)

来源:dev.to

时间:2024-07-09 20:36:52 128浏览 收藏

大家好,今天本人给大家带来文章《用于 Api 调用的自定义钩子(Reactjs)》,文中内容主要涉及到,如果你对文章方面的知识点感兴趣,那就请各位朋友继续看下去吧~希望能真正帮到你们,谢谢!

用于 Api 调用的自定义钩子(Reactjs)

我确信在开发复杂且大型的 React 应用程序时,每个人都会为代码的可重用性而苦苦挣扎。一种方法是(用于 api 调用的自定义挂钩)。让我们开始创建它们吧。

首先,我对我的糟糕写作感到抱歉,我的语言本来就不是英语:)

当然,我们在应用程序中必须多次从服务器获取数据。那么,我们如何才能有效地处理这些需求呢?

使用获取自定义挂钩

该自定义钩子的代码将是这样的:

从“axios”导入axios;
从“反应”导入{useState};
从“react-toastify”导入{toast};
从“../../features/utils/ApiErrorMessages.json”导入 apiErrors;

导出默认函数 useGet() {
  const [getRes, setGetRes] = useState({});
  const [getLoading, setGetLoading] = useState(true);
  const [getError, setGetError] = useState({});

  const getData =(url:字符串|未定义,配置:对象)=> {
    如果(网址){
      轴
        .get(网址,配置)
        .then((res) => {
          setGetRes(res.data);
          setGetLoading(假);
        })
        .catch((错误) => {
          setGetError(错误);
          setGetLoading(假);
          toast.error(apiErrors.server_network_error);
        });
    }
  };

  返回 { getData, getRes, getError, getLoading };
}

说明:当我搜索创建像 useGet 这样的钩子时,我在通灵时遇到了问题。这个问题在我每次使用那个钩子时都会导致无限循环!我通过提供一个函数来从 useGet 返回调用使用端来解决这个问题,而不是调用它自己的钩子。
你可以很明显地看到它。(getData函数)

我们在那个钩子中真正做的事情是这样的:
1-设置所需的状态
2-声明 getData 函数(该函数向给定的 url 发送 get 请求并保存我们状态中的响应和错误)
3-返回我们写的所有状态和函数

使用方法如何?我不得不说它会是这样的:

const {getData , getRes , getErrors , getLoading} = useGet()

使用效果(()=> {
    异步 const fetche = () => {
        等待 getData({url : '/api/users' , 配置 : {}});
    } 
},[])

// 你的渲染逻辑

我不知道我是如何很好地解释我的代码中发生的事情的,但我希望你理解这一点。

usePost 自定义挂钩
代码:

从“axios”导入axios;
从“反应”导入{useState};
从“../../features/utils/ApiErrorMessages.json”导入 apiErrors;
从“react-toastify”导入{toast};

输入 postDataProps = {
  网址:字符串|不明确的;
  数据:对象;
  配置:对象;
};

导出默认函数 usePost() {
  const [postRes, setPostRes] = useState({});
  const [postLoading, setPostLoading] = useState(true);
  const [postError, setPostError] = useState({});

  const postData = ({ url, data, config }: postDataProps) => {
    如果(网址){
      轴
        .post(网址、数据、配置)
        .then((res) => {
          setPostLoading(假);
          setPostRes(res.data);
        })
        .catch((错误) => {
          setPostLoading(假);
          setPostError(错误);
          toast.error(apiErrors.server_network_error);
        });
    }
  };

  返回 { postData, postRes, postError, postLoading };
}

要快乐!逻辑是一样的。但这是数据属性的差异!我们知道,当我们想要将某些内容发布到服务器时,我们必须随之发送数据。所以我们也在这里发送数据。

实施它们非常容易。现在您可以在您的应用程序中重复使用您的调用 api 功能!
Maby,我在这些钩子上没有很好地进行最佳实践。我正在学习。但现在可以了。
不要忘记可重用性。

快乐编码。

今天带大家了解了的相关知识,希望对你有所帮助;关于文章的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:dev.to 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>