我正在从事一个小型汽车Electron store 项目.当用户点击Products中的"更多详细信息"时,我试图在新页面中获取ProductDetails渲染,然而,它失败了.首先,它没有在浏览器栏上显示路径(应为"http://localhost:3000/product-details"),其次,它正在呈现Home页面.

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>
         <Route path="/home" element={<Home />} />
         <Route path="/cart" element={<Cart />} />
         <Route path="/product-details/:id" element={<ProductDetails />} />
         <Route path="*" element={<Navigate to ="/home" replace />} />
       </Route>
     </Routes>
   </Router>
 );
}

export default App;

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;

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];

 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;

你能帮助我解决这个问题吗?我try 更改路由,判断语法,遵循我的教程,但都没有成功.

推荐答案

Issue

Product组件由在路由路径"/home"上呈现的Home组件呈现,并使用108个链接目标路径.相对路径与当前URL路径的关系为relative.当当前URL路径为"/home"且链接目标为to={`product-details/${car.id}`}时,则生成的导航操作将为"/home/product-details/someIdValue".由于没有与URL路径匹配的显式路由路径,因此呈现path="*" Buttmatcher/"catch all"路由,并且UI重定向到"/home".

Solution

使用102个链接目标路径.relativeabsolute路由路径之间的区别在于绝对路径从根开始,例如"/".换句话说,向链接目标路径值添加前"/"个字符.

示例:

to={`/product-details/${car.id}`}

代码 :

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 },
]

function Products() {
  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}`}>
              More details
            </Link>
          </li>
        ))}
      </ul>
    </div>
  );
}

Javascript相关问答推荐

阻止iOS浏览器在传输摄像机视频时启用全屏摄像机模式

序列化我的数据并发送httpPost请求后,控制器收到空参数

复合密钥查找在mongoDB中未按预期工作

响应式JS DataTable中的Bootstrap 5弹出程序无法正常工作

脚本.js:3:20未捕获的类型错误:无法读取空的属性(读取addEventHandler)

不渲染具有HTML参数的React元素

JS生成具有给定数字和幻灯片计数的数组子集

RxJS setTimeout操作符等效

如何在JavaScript中在文本内容中添加新行

成帧器运动中的运动组件为何以收件箱开始?

警告!合同执行期间遇到错误[执行已恢复](Base Layer 2)

如何为我的astro页面中的相同组件自动创建不同的内容?

将现场录音发送到后端

更改JSON中使用AJAX返回的图像的路径

v—自动完成不显示 Select 列表中的所有项目

对路由DOM嵌套路由作出react

为什么我的自定义元素没有被垃圾回收?

JavaScript不重定向配置的PATH

使用jQuery find()获取元素的属性

有没有办法更改Chart.js 3.x.x中主要刻度的字体?