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

Next.js中router.push报错TypeError: path.startsWith is not a function求助

解决Next.js router.push跳转报错及对象参数传递问题

错误原因分析

  1. pathname格式错误:你在router.push的pathname中直接写了/publicacion/perfilPublicacion,未用引号包裹,这会被JavaScript解析为正则表达式而非字符串,导致path.startsWith调用失败(正则表达式没有该方法)。
  2. query参数类型错误:Next.js的router.push中query仅支持字符串/字符串数组类型,直接传递publicacion对象会导致参数无法正确解析。

修正后的代码

1. 跳转按钮组件(修正pathname和参数序列化)

<button 
  className="bg-blue-500 hover:bg-violet-500 text-white font-bold py-2 px-4 rounded mx-auto mt-auto"
  onClick={() => router.push({ 
    pathname: '/publicacion/perfilPublicacion', // 改为字符串格式
    query: { publicacion: JSON.stringify(publicacion) } // 对象序列化为字符串
  })}
>
  Me interesa
</button>

2. 目标页面(反序列化参数)

import PerfilPublicacion from "@/app/components/Publicacion/PerfilPublicacion";
import { useRouter } from "next/navigation";

export default function PerfilPublicacionPage() {
  const router = useRouter();
  const { publicacion } = router.query;
  
  // 反序列化字符串为对象,处理参数未定义的情况
  const publicacionData = publicacion ? JSON.parse(publicacion) : null;

  return <PerfilPublicacion publicacion={publicacionData} />;
}

额外注意事项

  • 如果publicacion对象包含特殊字符,序列化后需编码避免参数解析异常:
    // 跳转时
    query: { publicacion: encodeURIComponent(JSON.stringify(publicacion)) }
    // 接收时
    const publicacionData = publicacion ? JSON.parse(decodeURIComponent(publicacion)) : null;
    
  • 确保publicacion对象是可序列化的(不包含函数、Symbol等无法JSON序列化的类型)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 15:46:04