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

React-router-dom v6结合TypeScript使用useNavigate传参报错如何解决

react-router-dom v6 useNavigate传参报错解决方案

报错原因

navigate方法的第二个参数为固定的NavigateOptions类型,不允许直接挂载自定义参数字段,所有需要跨页面传递的状态值都必须放到state属性下。

正确传参写法

const handleSelect = (id: number) => {
    navigate('/Players', {
      state: {
        userId: id
      }
    });
  };

目标页面取参方式

在/Players页使用useLocation钩子读取传递的参数:

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

const PlayersPage = () => {
  const location = useLocation();
  // TypeScript场景可自行给state添加类型声明避免类型警告
  const userId = location.state?.userId as number;
  
  // 后续业务逻辑
}

其他常用传参方式(URL可见参数)

如果需要参数显示在URL上,可使用路由参数方案:

  1. 先定义路由规则:
// 路由配置项
{
  path: '/Players/:userId',
  element: <PlayersPage />
}
  1. 跳转传参写法:
const handleSelect = (id: number) => {
  navigate(`/Players/${id}`);
};
  1. 目标页取参:
import { useParams } from 'react-router-dom';

const PlayersPage = () => {
  const { userId } = useParams<{userId: string}>();
  // 转换为数字:const userIdNum = Number(userId);
}
  • state:用于存储跨页面传递的自定义状态,刷新页面后状态会丢失
  • replace:布尔值,设为true时跳转后会替换当前历史栈记录,点击浏览器返回键不会回到上一页
  • preventScrollReset:布尔值,设为true时跳转页面不会自动重置滚动条位置
  • relative:控制相对路径的解析规则,可选值为route或path

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:27:03