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

React项目使用axios获取单篇博客详情返回undefined问题求助

问题原因&解决方案

  • 核心404原因:请求地址不一致
    博客列表组件使用环境变量process.env.REACT_APP_API_URL拼接请求地址,指向你实际的后端接口,但详情页直接把请求地址写死为示例域名https://example.com,两个组件请求的后端服务不一致,自然会返回404。
  • 语法错误:组件导出方式非法
    详情页代码中export default const BlogDetail = (props) => {}是不被JS支持的写法,export default后不能直接跟变量声明语句,会导致组件加载异常。
  • 调试辅助缺失
    所有请求的catch块为空,没有打印错误日志,无法快速定位异常原因。

修正后的详情页代码

import React, { useState, useEffect } from 'react';
import { Link } from 'react-router-dom';
import axios from 'axios';

// 先声明组件再导出
const BlogDetail = (props) => {
    const [blog, setBlog] = useState({});

    useEffect(() => {
        const slug = props.match.params.id;

        const fetchData = async () => {
            try {
                // 替换为和列表页一致的环境变量拼接规则
                const res = await axios.get(`${process.env.REACT_APP_API_URL}/blog/${slug}`);
                setBlog(res.data);
            }
            catch (err) {
                // 新增错误日志打印方便后续调试
                console.error('详情请求错误:', err)
            }
        };

        fetchData();
    }, [props.match.params.id]);

    const createBlog = () => {
        // 新增默认空值避免渲染警告
        return {__html: blog.body || ''}
    };

    const capitalizeFirstLetter = (word) => {
        if (word)
            return word.charAt(0).toUpperCase() + word.slice(1);
        return '';
    };

    return (
        <div>
            <div dangerouslySetInnerHTML={createBlog()} />
        </div>
    );
};

export default BlogDetail;

可选校验项

如果修改后仍然有问题,可检查后端接口规则:确认详情接口的路径是否为/blog/[参数值],如果后端定义的路径不同,同步修改请求路径即可。

内容的提问来源于stack exchange,提问作者C-Bizz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 14:12:02