使用 react.js 连接到 API 后无法加载图像
2022-02-24
778
我创建了一个自定义获取组件,我只是想通过名为“the dog API”的 API 获取要加载到页面上的图像。我是否遗漏了某些关键内容?
App.js
import './App.css';
import './Dog.js';
import useFetch from './useFetch';
function DogApp() {
const API_KEY = "";
const { data, loading, error } = useFetch(`https://api.thedogapi.com/v1/images/search/API_KEY=${API_KEY}`);
if (loading) return <h1>Loading the dogs!</h1>
if (error)console.log(error);
return (
<div className="DogApp">
<img src={data?.url}></img>
</div>
);
}
export default DogApp;
UseFetch.js(用于获取数据的钩子)
import { useEffect, useState } from 'react';
import axios from "axios";
function useFetch(url) {
const [data, setData] = useState(null); //initialize as null depending on what data is
const [loading, setLoading] = useState(false);
const [error, setError] = useState(null);
useEffect(() => {
setLoading(true);
axios //make request, if successful it sets data, if not, seterror state
.get(url)
.then((response) => {
setData(response.data);
}).catch((err) => {
setError(err)
}).finally(() => {
setLoading(false);
});
}, [url]);
return {data, loading, error};
}
export default useFetch;
我尝试从以下 API URL 检索数据: https://api.thedogapi.com/v1/images/search/
1个回答
因此,您的 API 调用(根据 thedogapi.com 上的示例)需要在标头中设置 API 密钥,如下所示:
axios.defaults.headers.common['x-api-key'] = "DEMO-API-KEY"
这修复了 404,但您的代码仍然无法工作,因为数据是以对象数组的形式返回的。因此,您需要像这样映射它们:
{data.map((breed) => (<img src={breed?.url} />))}
我已在 此处 创建了一个演示沙盒
TomS
2022-02-24