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

React使用navigate()跳转页面时如何正确传递props?

React Router 中使用 navigate 传递参数的正确方式

你当前的问题出在navigate函数的参数传递方式上,直接传入{ card }是无效的,必须把数据放到state字段里。

1. 修正跳转代码

把要传递的card数据嵌套在state对象中:

{
  notes.map((card) => (
    <div key={card.id} onClick={() => navigate("/EditNotes", { state: { card } })}>
      <NoteCard title={card.NoteTitle} bgColor={card.CardColor} />
    </div>
  ));
}

2. 在目标组件接收参数

在EditNotes组件中,需要使用useLocation钩子来获取路由携带的state数据,而不是直接通过组件props接收:

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

const EditNotes = () => {
  const location = useLocation();
  // 加|| {}是为了避免页面刷新或state为空时解构报错
  const { card } = location.state || {};
  console.log(card);
  // 后续业务逻辑...
}

额外注意:持久化参数的方案

如果需要页面刷新后参数依然存在,建议通过URL参数传递卡片ID,再根据ID重新获取数据:

跳转代码修改:

{
  notes.map((card) => (
    <div key={card.id} onClick={() => navigate(`/EditNotes/${card.id}`)}>
      <NoteCard title={card.NoteTitle} bgColor={card.CardColor} />
    </div>
  ));
}

路由配置修改:

// 假设你的路由是用BrowserRouter包裹的
<Route path="/EditNotes/:id" element={<EditNotes />} />

目标组件获取ID并查询数据:

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

const EditNotes = () => {
  const { id } = useParams();
  // 从数据源(比如notes数组或后端接口)获取对应ID的卡片数据
  const card = notes.find(item => item.id === id);
  console.log(card);
  // 后续业务逻辑...
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 20:25:23