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

React中如何点击列表项跳转至新页面展示完整物品信息?

解决方案:用React Router实现页面跳转

因为要展示大量物品信息,新页面比弹窗更适合,推荐使用React Router来实现单页内的页面跳转,步骤如下:

1. 安装React Router DOM

首先在项目中安装路由依赖:

npm install react-router-dom
# 或者用yarn
yarn add react-router-dom

2. 配置全局路由

在你的根组件(比如App.js)中配置路由规则,指定详情页的路径:

import { BrowserRouter as Router, Routes, Route } from 'react-router-dom';
import DummyItem from './DummyItem'; // 你的列表组件
import ItemDetail from './ItemDetail'; // 新建的详情页组件

function App() {
  // 假设你有物品列表数据
  const items = [
    { InventryID: '1', description: '物品A', annotation: '测试备注A', fullInfo: '物品A的完整详细信息...' },
    { InventryID: '2', description: '物品B', annotation: '测试备注B', fullInfo: '物品B的完整详细信息...' }
  ];

  return (
    <Router>
      <Routes>
        {/* 列表页面路由 */}
        <Route path="/" element={
          <div className="item-list">
            {items.map(item => (
              <DummyItem key={item.InventryID} {...item} />
            ))}
          </div>
        } />
        {/* 详情页路由,:id是动态参数,对应物品ID */}
        <Route path="/items/:id" element={<ItemDetail items={items} />} />
      </Routes>
    </Router>
  );
}

export default App;

3. 修改DummyItem组件,实现点击跳转

把整个列表项区域改成可点击的,有两种方式:

方式一:用Link组件(推荐,符合路由规范)

import "./DummyItem.css"
import DummyDate from "./DummyDate"
import { Link } from 'react-router-dom'; // 导入Link

export default function DummyItem(props) {
  return (
    {/* 用Link包裹整个列表项,to属性指定跳转路径,带上物品ID */}
    <Link to={`/items/${props.InventryID}`} className="dummy-item">
      <DummyDate />
      <div className={"dummy-item__description"}>
        <h2>{props.description}</h2>
        <p>Annotations: {props.annotation}</p>
        <span className="dummy-item__inventory">Inventory ID: {props.InventryID}</span> {/* 把按钮改成普通文本,因为整个区域可点击 */}
      </div>
    </Link>
  )
}

方式二:用useNavigate钩子(适合需要额外点击逻辑的场景)

import "./DummyItem.css"
import DummyDate from "./DummyDate"
import { useNavigate } from 'react-router-dom'; // 导入useNavigate

export default function DummyItem(props) {
  const navigate = useNavigate(); // 初始化导航函数

  const handleClick = () => {
    // 这里可以加额外逻辑,比如日志、状态更新等
    navigate(`/items/${props.InventryID}`); // 跳转至详情页
  };

  return (
    <div className="dummy-item" onClick={handleClick} style={{ cursor: 'pointer' }}> {/* 加cursor提示可点击 */}
      <DummyDate />
      <div className={"dummy-item__description"}>
        <h2>{props.description}</h2>
        <p>Annotations: {props.annotation}</p>
        <button type="button" className="dummy-item__inventory" onClick={(e) => {
          e.stopPropagation(); // 阻止按钮点击冒泡到父元素,避免重复跳转
          alert('Show Details'); // 保留原按钮逻辑(可选)
        }}>Inventory ID: {props.InventryID}</button>
      </div>
    </div>
  )
}

4. 创建详情页组件(ItemDetail.js)

这个组件负责展示物品的完整信息,通过动态路由参数获取物品ID,然后匹配对应数据:

import { useParams } from 'react-router-dom';
import DummyDate from "./DummyDate";

export default function ItemDetail({ items }) {
  const { id } = useParams(); // 获取路由中的物品ID参数
  const item = items.find(item => item.InventryID === id); // 从列表数据中找到对应物品

  if (!item) {
    return <div className="item-detail">未找到该物品</div>;
  }

  return (
    <div className="item-detail">
      <h1>{item.description}</h1>
      <DummyDate /> {/* 可以复用日期组件 */}
      <p>库存ID: {item.InventryID}</p>
      <p>备注: {item.annotation}</p>
      <div className="full-info">
        <h3>完整信息</h3>
        <p>{item.fullInfo}</p>
        {/* 这里添加所有需要展示的大量信息 */}
      </div>
    </div>
  );
}

5. 样式调整(可选)

给dummy-item类添加鼠标指针样式,提示用户可点击:

.dummy-item {
  /* 原有样式 */
  cursor: pointer;
}

这种方案的优势在于:

  • 专门的页面可以充分利用屏幕空间展示大量信息,用户可自由滚动浏览
  • 符合浏览器的导航习惯,支持前进/后退按钮
  • 路由参数清晰,便于后续扩展(比如分享详情页链接)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 10:52:19