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

React-Router-Dom(TypeScript)中location.state属性取值返回undefined问题

问题根因

react-router-dom v5的history.push方法参数规则为:第一个参数是目标路径,第二个参数直接就是要传递的state数据,不需要额外包裹一层state字段。你当前在Home.tsx里传递参数时多套了一层state结构,导致实际拿到的数据结构和预期不符:
你传递参数后,Edit组件内useLocation()返回的state实际结构是:

{
  state: { test: 5 }
}

所以直接访问state.test自然返回undefined,只有访问state.state.test才能拿到值,属于传参逻辑和定义不匹配的问题。

修复方案

两种方案任选其一即可,推荐第一种符合官方规范的方案:

方案1:修改Home组件的传参逻辑(推荐)

直接把要传递的参数作为history.push的第二个参数,去掉外层多余的state包裹:

// Home.tsx 修正后的handleEdit方法
const handleEdit = (data: Route) => {
    history.push("/edit", {
      test: 5
    });
  };

修改后Edit组件内的state.test就能正常返回5,和你定义的Route接口完全匹配。

方案2:适配现有传参逻辑修改取值规则(不推荐)

如果不想调整传参逻辑,就同步修改类型定义和取值方式:
首先调整interface.ts:

export interface Route {
  state: {
    test: Number;
  }
}

然后Edit组件内取值改为:

console.log("asdf", state.state.test);
额外注意事项

建议访问state属性时添加可选链防护,避免用户直接访问/edit路由没有传递参数时,state为null导致的报错:

console.log("asdf", state?.test);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 14:24:00