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

React路由useParams失效:商品详情页跳转异常求助

汽车电商项目路由问题排查与修复

问题分析

点击Products组件的「More details」按钮后,浏览器地址栏未显示预期路径http://localhost:3000/product-details,页面直接跳转至Home组件,核心问题出在路由路径匹配和链接路径格式上。

修复方案

1. 修正Link组件的绝对路径

Products.js中Link的to属性使用了相对路径,导致路由无法匹配到配置的绝对路径规则,需添加根路径前缀/:

修改后的Products.js代码:

import React from 'react';
import toyota from '../assets/images/toyota_camry2023.png'
import honda from '../assets/images/honda_civic2023.png';
import ford from '../assets/images/ford_mustang2023.png';
import { Link } from 'react-router-dom';

function Products() {
  const cars = [
    { id: 1, name: 'Toyota Camry', price: 25000, img: toyota },
    { id: 2, name: 'Honda Civic', price: 27000, img: honda },
    { id: 3, name: 'Ford Mustang', price: 35000, img: ford },
  ]

  return (
    <div>
      <h2>Find The Best Deals</h2>
      <h2>Available Cars</h2>
      <ul>
        {cars.map(car => (
          <li key={car.id}>
            <img src={car.img} alt={car.name} />
            <h3>{car.name}</h3>
            <p>Price: ${car.price}</p>
            <Link to={`/product-details/${car.id}`} target="_blank">More details</Link>
          </li>
        ))}
      </ul>
    </div>
  )
}

export default Products;

2. 简化路由嵌套结构

App.js中Routes下嵌套了无路径的空Route,虽不违反语法,但可能导致路由匹配逻辑异常,直接将子Route放在Routes下即可:

修改后的App.js代码:

import React from 'react';
import Cart from './pages/Cart';
import Home from './pages/Home';
import ProductDetails from './pages/ProductDetails';
import { BrowserRouter as Router, Route, Routes } from 'react-router-dom';
import { Navigate } from 'react-router-dom';

function App() { 
 return (
   <Router>
     <Routes>
       <Route path="/home" element={<Home />} />
       <Route path="/cart" element={<Cart />} />
       <Route path="/product-details/:id" element={<ProductDetails />} />
       <Route path="*" element={<Navigate to="/home" replace />} />
     </Routes>
   </Router>
 );
}

export default App;

3. 可选:添加空值容错处理

为避免无效id导致页面崩溃,在ProductDetails.js中添加空值判断:

修改后的ProductDetails.js代码:

import React from 'react';
import { useParams } from 'react-router-dom';

function ProductDetails() {
  const { id }  = useParams();

  const Product = {
    1: {
      Engine: '2.5L Inline-4 Gas',
      Drivetrain: 'Front-Wheel Drive', 
      Transmission: '8-Speed Automatic', 
      Warranty: '5 Years / 100000 km'
    },
    2: {
      Engine: 'Turbocharged DOHC 16-valve Inline-4', 
      Drivetrain: 'Front-Wheel-Drive',    
      Transmission: 'Continuously Variable Automatic', 
      Warranty: '3 Years / 60000 km'
    },
    3: {
      Engine: 'Intercooled Turbo Premium Unleaded I-4', 
      Drivetrain: 'Rear Wheel Drive with limited-slip differential', 
      Transmission: '10-speed automatic transmission', 
      Warranty: '3 years / 60000 km'
    },
  };

 const productDetails = Product[id];

 if (!productDetails) {
   return <div>Product not found</div>;
 }

 return (
    <div>
      <h2>Car Details</h2>
      <p>{productDetails.Engine}</p>
      <p>{productDetails.Drivetrain}</p>
      <p>{productDetails.Transmission}</p>
      <p>{productDetails.Warranty}</p>
      <button>Add to Cart</button>
      <button>Book a Test Drive</button>
    </div>
  )
}

export default ProductDetails;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 21:30:30