You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React中使用axios与useEffect获取天气数据可打印但无法渲染

问题原因分析
  • 条件判断逻辑错误(核心失效原因)
    运算符优先级中逻辑非!优先级高于全等===,你写的!data === ""实际等价于(!data) === "":初始状态data是空字符串,!""结果为true,true === ""返回false;接口请求完成后data是对象,!对象结果为false,false === ""也返回false。所以卡片渲染的判断条件永远不成立,只会展示加载失败提示。
  • useEffect 回调直接使用 async 语法不符合规范
    useEffect期望返回值是清理函数或者undefined,直接传入async函数会返回Promise对象,React无法正常执行副作用清理逻辑,控制台会抛出警告。
  • 缺少属性访问安全防护
    条件判断修正后,如果接口返回数据结构异常,直接访问data.consolidated_weather[0]这类深层属性会直接抛出报错,导致页面白屏。
  • 状态初始值定义不合理
    data后续存储的是接口返回的对象,初始值设为空字符串不符合类型预期,会提高判断逻辑的出错概率。
修正后的完整代码
import React, {useState, useEffect} from 'react'
import Card from 'react-bootstrap/Card'
import 'bootstrap/dist/css/bootstrap.min.css';
import './Page_Styled.css'
import axios from 'axios';

const BASE_URL = "https://www.metaweather.com/api/location";
const CROSS_DOMAIN = "https://the-ultimate-api-challenge.herokuapp.com"
const REQUEST_URL = `${CROSS_DOMAIN}/${BASE_URL}`

function Page() {
    // 初始值改为null,匹配后续存储对象的类型预期
    const [data, setData] = useState(null);

    useEffect(() => {
        // 内部封装异步请求函数,避免直接给useEffect传async回调
        const fetchWeather = async () => {
            try {
                const res = await axios.get(`${REQUEST_URL}/1103816`)
                setData(res.data);
            } catch (err) {
                console.error('天气接口请求失败', err)
            }
        }
        fetchWeather()
    }, []) 

    return (
        <div className="mx-auto page--container">
        {/* 修正条件判断,用可选链做属性访问防护 */}
        {data ?
            <Card>
                <Card.Body>
                    <Card.Title>This is Weather Card</Card.Title>
                    <Card.Text>Min degree: {data?.consolidated_weather?.[0]?.min_temp}</Card.Text> 
                    <Card.Text>Max degree: {data?.consolidated_weather?.[0]?.max_temp}</Card.Text>
                    <Card.Text>Location: {data?.parent?.title}</Card.Text>
                    </Card.Body>
            </Card>
            :
             <p>Program cannot progress</p>
            }
        </div>
    )
}

export default Page

内容的提问来源于stack exchange,提问作者Thanh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 04:24:06