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

向React Router传递prop时State is undefined问题如何解决?

React Router Link传递state为undefined的解决方案

核心诱因

你为Link组件添加了target="_blank"属性触发新标签页打开。React Router的state参数是基于当前页面的会话上下文存储传递的,新开标签页会完全丢失原页面的会话状态,因此拿到的state为undefined。

对应解决办法

方案1:同标签页跳转(无需新开页面时使用)

直接移除target="_blank"属性即可正常取到state参数:

// ArticleItem.js修改后代码
<Link to="/articlePage" state={{ heading: heading }}>
  continue reading...
</Link>

原有接收代码无需调整,可直接通过location.state.heading拿到传递值。

方案2:URL参数传值(必须新开标签页时使用)

如果业务需要强制新开标签页,把参数拼到URL的query字段中传递:

  1. 修改Link跳转逻辑:
<Link 
  to={`/articlePage?heading=${encodeURIComponent(heading)}`} 
  target="_blank"
>
  continue reading...
</Link>

这里用encodeURIComponent编码是为了避免参数含特殊字符时解析出错

  1. 新页面取参逻辑调整:
import { useSearchParams } from 'react-router-dom';

const ArticleSoloPage = () => {
  const [searchParams] = useSearchParams();
  const heading = decodeURIComponent(searchParams.get('heading'));

  useEffect(()=>{
    console.log(heading);
  },[])
}

其他排查方向

如果移除target="_blank"后仍拿不到state,检查以下两项:

  • 确认state属性拼写正确,为全小写,没有写成State之类的错误写法
  • 确认ArticleSoloPage组件在Router组件的包裹范围内,useLocation只能在Router上下文内正常工作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 14:06:02