axios 为什么我不能从API读取数据(React应用程序)

lkaoscv7  于 2023-04-20  发布在  iOS
关注(0)|答案(1)|浏览(82)

我正在学习React,我遇到了一个我自己无法解决的问题。
我试图从API中获取数据,但却得到了一个未定义的数组。
我创建了axios.js

import axios from "axios";

const instance = axios.create({
    baseURL: "http://api.weatherapi.com/v1/",
});

export default instance;

Requests.js

const API_KEY = '7be85e2711194910b29123355231904';

export const fetchDataByCity = (city) => {
    return `current.json?key=${API_KEY}&q=${city}&aqi=no`;
}

Page.js

import axios from "../../axios"
import { fetchDataByCity } from "../../Requests";
import { useEffect, useState } from "react";
const Page = props => {
    const [data, setData] = useState([]);
    useEffect(() => {
        async function fetchData() {
            let request = [];
            request = await axios.get(fetchDataByCity("London"));

            setData(request.data.results);
            return request;
        }

        fetchData();
    }, []);

    console.log(data);
    return (
        <div >
            hey
        </div>
    );
}

export default Page;

当我尝试在控制台中显示数据时,我得到undefined

jv4diomz

jv4diomz1#

它是undefined,因为你试图从响应中访问results键,但没有从响应中返回键。响应是一个对象,你需要从响应中返回数组。

useEffect(() => {
        async function fetchData() {
            ....
            <!-- no key `results` exists in the response -->
            setData(request.data.results); 
            ....
        }

        fetchData();
    }, []);

这是response,请检查。
解决方法可以像在对象中初始化数据状态并在响应后设置

const [data, setData] = useState({}); // object

useEffect(() => {
        async function fetchData() {
            ....
            <!-- remove `results` key  -->
            setData(request.data); 
            ....
        }

        fetchData();
    }, []);

相关问题