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

使用Axios在React中Fetch数据时出现Cannot read properties错误求助

问题分析与解决

错误原因

你初始化post状态时未设置默认值,const [post, setPost] = useState()会让post初始值为undefined。组件首次渲染时,Axios的网络请求还未完成,此时直接访问post.title就会触发"Cannot read properties of undefined (reading 'title')"错误。

解决方案

以下三种方法均可解决该问题,任选其一即可:

1. 给post设置初始空对象

修改useState的初始化值,让post默认是一个空对象,即使请求未完成,访问post.title只会得到undefined,不会抛出错误:

const [post, setPost] = useState({});

2. 使用可选链操作符(推荐)

在访问title时添加可选链?.,它会自动判断post是否存在,不存在则直接返回undefined,避免报错:

{post?.title}

3. 条件渲染

通过逻辑与操作符判断post是否存在,只有存在时才渲染title:

{post && post.title}

修改后的完整代码示例(以可选链为例)

import React, {useState, useEffect} from "react";
import axios from "axios";

function DataFetching(){
    const [post, setPost] = useState();
    const [id, setId] = useState(1)
    const [idFromButtonClick, setIdFromButtonClick] = useState(1)

    const handleClick = () => {
        setIdFromButtonClick(id)
    }

    useEffect(() => {
        axios.get(`https://jsonplaceholder.typicode.com/posts/${idFromButtonClick}`)
            .then(res => {
                console.log(res);
                setPost(res.data)
            })
            .catch(err => {
                console.log(err)
            })
    }, [idFromButtonClick])

    return (
        <div>
            <input type="text" value={id} onChange={e => setId(e.target.value)} />
            <button type="button" onClick={handleClick}>Fetch</button>
            {post?.title}
        </div>
    )
}

export default DataFetching

内容的提问来源于stack exchange,提问作者R-b-n

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 06:25:20