【发布时间】:2021-01-07 15:14:23
【问题描述】:
有人知道为什么这个useFetch 钩子没有获取任何东西吗? Chrome Devtools 说 beerId 没问题,它是传入的,它是由内部异步函数读取的,但根本没有发送 fetch。网络选项卡显示没有 API 调用。因此,输出的是一个空对象,不好。我错过了什么? API 很好,我的其他调用返回响应也很好。干杯。
export const useFetch = (beerId, initialValue) => {
const [isLoading, setLoading] = useState(false);
const [data, setData] = useState(initialValue);
useEffect(() => {
async function fetchBeerById() {
try {
setLoading(true)
const res = await fetch(`https://api.punkapi.com/v2/beers/${beerId}`);
const beer = await res.json();
setData(beer)
} catch (err) {
console.log(err)
} finally {
setLoading(false)
}
}
fetchBeerById()
},[beerId])
return { data, isLoading}
}
这是我在应用程序中使用它的方式:
const BeerDetails = () => {
// get id from URL
const params = useParams();
const { beerId } = params;
debugger
// fetch that beer, apply local price
const { data } = useFetch(beerId, {})
const beer = usePriceBeer(data)
// get the selected data from beer
const selectBeerData = getSelectedBeerDetails(beer)
const { name, image_url, abv, ibu, price, tagline, description } =
selectBeerData;
return (...render jsx using above vars)
}
这是我在 DevTools 中看到的。出于某种原因,fetch 命令是无效的。如果我将鼠标悬停在res 上,则不会弹出任何内容,甚至不会触发 API 调用。事实上,整个useEffect 块只是被跳过了,甚至没有将isLoading 设置回false。
【问题讨论】:
-
能否举例说明如何使用此功能?
-
^^^ 是的,需要看看你是如何在你的应用程序中使用它的
-
您发布的代码运行良好。正如其他人在上面提到的,您应该编辑您的问题并添加您使用此自定义挂钩的方式。
-
谢谢各位,我已经编辑了这个问题以获得更多背景信息。 useEffect 钩子是罪魁祸首,但我不知道如何让这该死的东西开火......
标签: reactjs react-hooks fetch