Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
在实践中反应:处理HTTP请求_创想鸟

在实践中反应:处理HTTP请求

处理http请求

这是一种常见的方法,您可能已经看到了许多代码的示例,这些代码在组件中进行了http调用,更改的细节,例如使用或axios的使用或状态的管理方式

>您可能已经看到了如何将此代码重新放置为自定义钩子,但让我们再次进行

此组件相对简单,您在组件中具有3个状态,以表示的状态申请

>使用useefect仅在安装组件时执行一次,并且是制造

整个请求有效
第一种方法:

import { useeffect, usestate } from "react";function app() {  const [isloading, setisloading] = usestate(false);  const [error, seterror] = usestate(null);  const [data, setdata] = usestate(null);  useeffect(() => {    const fetchdata = async () => {      setisloading(true);      const response = await fetch("https://fakestoreapi.com/products");      if (!response.ok) throw new error("failed to fetch data");      const data = await response.json();      setdata(data);      setisloading(false);    };    fetchdata().catch((e) => seterror(e));  }, []);  return (    
{isloading &&

loading...

} {error &&

{error.message}

} {data &&
{json.stringify(data)}

} );}export default app;
在钩子中分开获取逻辑

第二种方法

在这种方法中,我们在自定义挂钩中分离出fetch逻辑,在任何组件中都可以重复使用,

但是我们也降低了组件的责任,现在只需要处理国家的渲染和>申请

>但这仍然可以改善,应用程序组件仍然需要处理提出请求的逻辑,尽管不是

>需要处理请求的状态

第二种方法:

// usefetch.tsximport { useeffect, usestate } from "react";type usefetchparams = {  fetcher: () => promise;  querykey: string[];};export function usefetch({ fetcher, querykey }: usefetchparams) {  const [isloading, setisloading] = usestate(false);  const [error, seterror] = usestate(null);  const [data, setdata] = usestate(null);  const querykeystring = json.stringify(querykey);  useeffect(() => {    const fetchdata = async () => {      setisloading(true);      const data = await fetcher();      setdata(data);      setisloading(false);    };    fetchdata().catch((e) => seterror(e));  }, [querykeystring]);  return { isloading, error, data };}
// app.tsximport { usefetch } from "./usefetch.tsx";const endpoint = "https://fakestoreapi.com/products";function app() {  const { isloading, error, data } = usefetch({    querykey: [endpoint],    fetcher: async () => {      const response = await fetch(endpoint);      if (!response.ok) throw new error("failed to fetch data");      return response.json();    },  })  return (    
{isloading &&

loading...

} {error &&

{error.message}

} {data &&
{json.stringify(data)}

} );}export default app;
在自定义挂钩中分开请求

>现在,这就是我认为理想的责任分离。

>自定义挂钩使用fect,负责处理提出请求的逻辑;

hook productuctfindall负责制作产品申请;

应用程序组件负责处理产品渲染和请求状态

第三种方法

// useproductfindall.tsximport { usefetch } from "./usefetch.tsx";const endpoint = "https://fakestoreapi.com/products";async function fetchproductfindall(params = {}) {  const searchparams = new urlsearchparams(params);  const response = await fetch(endpoint + `?${searchparams.tostring()}`);  if (!response.ok) throw new error("failed to fetch data");  return response.json();}export function useproductfindall(params = {}) {  return usefetch({    querykey: [endpoint, params],    fetcher: () => fetchproductfindall(params)  });}
// App.tsximport { useProductFindAll } from "./useProductFindAll.tsx";function App() {  const { isLoading, error, data } = useProductFindAll({ limit: 6 })  return (    
{isLoading &&

Loading...

} {error &&

{error.message}

} {data &&
{JSON.stringify(data)}

} );}export default App;如果您有经验或知道react-query库,则可以看到hook usefetch非常类似的使用react-query的钩子,这是真的 react-want是一个库,可以提取提出申请的逻辑,并且是处理>的绝佳替代方法后端的后端状态。该库非常强大,并且具有许多资源,例如缓存,重复,分页>因此,如果您要处理项目中的许多请求,我建议您查看库>反应

以上就是在实践中反应:处理HTTP请求的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1501295.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
使用Angular和MVC项目的区域J误差
上一篇 2025年12月19日 23:26:30
与JS集的数学魔术:神秘化
下一篇 2025年12月19日 23:26:42

相关推荐

发表回复

登录后才能评论
关注微信