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

React中通过Link传参失败:商品详情页数据为null的解决方法

问题解决:React路由跳转时详情页state为null

核心原因:React Router版本兼容问题

你当前使用的Link传参写法是React Router v5的格式,但如果项目是v6版本,这种写法无法正确传递state,导致详情页location.state始终为null。

解决方案:调整Link传参写法

1. 修改列表页(SustainabilityProducts.js)的Link组件

将原来的对象式to参数拆分为路径字符串和独立的state属性:

// 原代码
<Link to={{
  pathname: '/product-details', 
  state: { productTitle: card.productName }
}}>

// 修改后
<Link to="/product-details" state={{ productTitle: card.productName }}>

2. 验证路由配置(可选)

确保路由配置中/product-details对应正确组件,且整体包裹在路由容器内:

// 示例路由配置(通常在App.js或index.js)
import { BrowserRouter, Routes, Route } from 'react-router-dom';
import SustainabilityProducts from './path/to/SustainabilityProducts';
import ProductDetails from './path/to/ProductDetails';

function App() {
  return (
    <BrowserRouter>
      <Routes>
        <Route path="/sustainability-products" element={<SustainabilityProducts />} />
        <Route path="/product-details" element={<ProductDetails />} />
      </Routes>
    </BrowserRouter>
  );
}

3. 处理页面刷新丢失state的情况(可选)

state存储在内存中,刷新详情页会导致数据丢失。若需要持久化传参,可改用URL参数:

列表页修改:

<Link to={`/product-details?title=${encodeURIComponent(card.productName)}`}>

详情页修改:

import { useSearchParams } from 'react-router-dom';

function ProductDetails() {
  const [searchParams] = useSearchParams();
  const productTitle = searchParams.get('title');

  // ... 其余代码
}

额外检查点

确认API返回的card.productName有效,可在列表页添加日志验证:

{data.map((card) => {
  console.log('商品名称:', card.productName); // 检查是否有有效值
  return (
    <div className="cards" key={card.productId}>
      {/* Link组件 */}
    </div>
  )
})}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 21:46:19