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

Next.js中无法获取URL参数ID并结合Axios请求的问题

解决Next.js中useRouter获取URL参数id为undefined导致Axios请求失败的问题

问题原因

  • Next.js客户端路由中,router.query的参数加载是异步过程,组件初始渲染时router.query.id会是undefined
  • 你的useEffect依赖数组为空,仅在组件挂载时执行一次请求,此时id还未被正确获取,导致请求URL无效

解决方案

  1. 将id添加到useEffect的依赖数组中,确保id更新后重新触发请求
  2. 在发起请求前判断id是否存在,避免无效请求

修改后的代码

import Head from 'next/head'
import axios from 'axios'
import React, { useEffect, useState } from 'react'
import { useRouter } from 'next/router'


export default function QuejaID() {
    const router = useRouter()
    const id = router.query.id
    const [queja, setQueja] = useState();

    useEffect(() => {
        // 先判断id是否存在,再发起请求
        if (!id) return
        
        async function request() {
            try {
                const response = await axios.get(`http://localhost:3000/quejas/${id}`)
                setQueja(response.data)
                console.log(response)
            } catch (err) {
                console.log(err)
            }
        }
        request()
    }, [id]); // 将id加入依赖数组

    return (
        <>
            <Head>
                <title>Quejas</title>
                <meta name="description" content="queja" />
                <meta name="viewport" content="width=device-width, initial-scale=1" />
                <link rel="icon" href="/favicon.ico" />
            </Head>
            <main>
                {queja ? (
                    <div className="container d-flex justify-content-center">
                        <div className="card text-center w-75 m-5">
                            <div className="card-header">{queja._id}</div>
                            <div className="card-body">
                                <h5 className="card-title">{queja.queja}</h5>
                            </div>
                            <div className="card-footer text-muted">{queja.createdAt}</div>
                        </div>
                    </div>
                ) : id ? (
                    <div>Cargando queja...</div>
                ) : (
                    <div>No hay ninguna queja con ese ID</div>
                )}
            </main>
        </>
    )
}

内容的提问来源于stack exchange,提问作者Jose-xd

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 13:10:46