【发布时间】:2022-01-05 21:26:30
【问题描述】:
我使用 useAxios 自定义挂钩来避免代码重复,因为我调用的 API 始终相同。
import { useState, useEffect } from 'react';
import rest from './rest'; // inside there is a definition of axios.create baseURL...
const useAxios = (endpoint,queryString) => {
const [axiosData, setAxiosData] = useState(null);
const [axiosLoading, setAxiosLoading] = useState(true);
useEffect(() => {
const getRest = async () => {
setAxiosLoading(true);
try{
const sensors = await rest
.get('/'+ endpoint + '?' + queryString)
.then(res => {
setAxiosData(res.data);
setAxiosLoading(false);
});
}catch (e) {
console.log(e);
}
}
getRest();
}, [endpoint,queryString])
return {axiosData, axiosLoading};
}
export default useAxios;
这是我调用useAxios钩子的部分代码。
const {axiosData:data1} = useAxios('request1','');
const {axiosData:data2} = useAxios('request2','querystring1');
const {axiosData:data3} = useAxios('request3','querystring2');
我要解决的问题是如何等待所有请求完成,这样就可以肯定所有数据都准备好了。
我知道axios.all 并想使用类似的东西,但要使用可重用的代码,例如useAxios。
旁注:通过应用程序有很多 useAxios 调用,而不仅仅是我在这里解释的一种情况。这就是我试图重用它而不是使用 axios.all
编辑:
我之前可能已经提到过,但在子组件中还有另一个 useAxios (data4) 调用,它使用来自 data1, data2, data3 的数据,并且应该渲染另一个子组件的次数与 data1 中包含的对象数量一样多。我正在通过 Context API 传递数据,需要确保 data1, data2, data3 在 useAxios (data4) 调用之前可用
【问题讨论】:
标签: reactjs react-hooks axios