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

React Router v6中如何使用match.params.id?附报错及代码示例

React Router v6中获取路由参数id的正确方法

你遇到的报错是因为React Router v6彻底移除了旧版本中通过match对象获取路由参数的方式,直接访问match会导致它为undefined,进而触发Cannot read properties of undefined错误。

正确实现步骤:

  • 从react-router-dom中导入专门用于获取路由参数的useParams钩子
  • 在组件内部调用useParams()并解构出id参数
  • 用解构得到的id替代原代码中的match.params.id

修正后的完整代码:

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

const NoteDetail = () => {
  const [title, setTitle] = useState('');
  const [content, setContent] = useState('');
  const [category, setCategory] = useState('');
  const [date, setDate] = useState('');
  
  // 从路由参数中获取id
  const { id } = useParams();

  useEffect(() => {
    const fetching = async () => {
      const { data } = await axios.get(`/api/notes/${id}`);

      setTitle(data.title);
      setContent(data.content);
      setCategory(data.category);
      setDate(data.updatedAt);
    };

    fetching();
  }, [id]); // 仅保留id作为依赖项,避免因date状态更新导致无限循环

  return (
    <div>
      <h1>{title}</h1>
      <p>{content}</p>
      <span>{category}</span>
      <time>{date}</time>
    </div>
  );
};

export default NoteDetail;

额外注意:

确保你的路由配置中包含:id动态参数,与useParams解构的参数名一致:

import { Routes, Route } from 'react-router-dom';
import NoteDetail from './NoteDetail';

function App() {
  return (
    <Routes>
      <Route path="/notes/:id" element={<NoteDetail />} />
    </Routes>
  );
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 05:55:30