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

Reactjs中如何从URL获取ID?附代码及路由配置

从React路由URL中获取ID的解决方案

你的路由配置已经正确设置了动态参数user/:id,只需要修正组件里的几个细节,就能正常获取并使用URL中的ID:

1. 简化useParams()的使用

你已经调用了useParams(),但无需重复调用,一次解构就能拿到ID:

const User = () => {
  // 直接从useParams中解构出id
  const { id } = useParams();
  const [user, setUser] = useState({}); // 变量名改成user更贴合单条数据的场景

  // ...后续逻辑
}

2. 修复useEffect的依赖问题

你的useEffect依赖数组为空,会导致只有组件挂载时执行一次请求,ID变化时不会重新触发请求。需要把id加入依赖数组,同时增加基础的错误处理:

useEffect(() => {
  async function fetchData() {
    try {
      const res = await axios(`https://jsonplaceholder.typicode.com/comments/${id}`);
      setUser(res.data);
    } catch (err) {
      // 避免请求失败导致页面异常,增加错误日志
      console.error('获取数据失败:', err);
    }
  }

  // 确保id存在时再发起请求,避免初始状态下id为undefined的情况
  if (id) {
    fetchData();
  }
}, [id]); // 将id加入依赖数组,ID变化时自动重新请求

3. 完整修正后的User组件代码

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

const User = () => {
  const { id } = useParams();
  const [user, setUser] = useState({});

  useEffect(() => {
    async function fetchData() {
      try {
        const res = await axios(`https://jsonplaceholder.typicode.com/comments/${id}`);
        setUser(res.data);
      } catch (err) {
        console.error('获取用户数据失败:', err);
      }
    }

    if (id) {
      fetchData();
    }
  }, [id]);

  return (
    <div style={{ width: "80%", margin: "0 auto" }}>
      <div
        style={{
          margin: "20px",
          marginRight: "auto",
          borderRadius: "20px",
          border: "2px solid #000",
          width: "50%",
          padding: "10px",
        }}
      >
        {/* 渲染获取到的用户数据 */}
        <h3>用户ID: {id}</h3>
        <p>名称: {user.name}</p>
        <p>邮箱: {user.email}</p>
        <p>内容: {user.body}</p>
      </div>
    </div>
  );
};

export default User;

验证效果

你可以在组件里直接console.log(id),或者在页面上渲染{id},就能看到URL中的ID值(比如19)已经被正确获取并使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 20:10:18