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

Next.js应用使用useRouter()跳转搜索结果页出现404错误求助

Next.js 搜索应用路由问题排查方案

一、初始404问题的核心原因

在Next.js App Router规则里,/search路径对应的页面文件必须是app/search/page.js——你最初的目录里根本没有search目录,直接跳转/search自然会返回404。

二、调整目录后的问题修正步骤

你改成app/search/index.js是Pages Router的老写法,App Router不认index.js作为路由页面,必须用page.js。同时同步解决导入和组件重名问题:

1. 修正路由文件命名

把app/search/index.js直接重命名为app/search/page.js,让/search路径能正确映射到该组件。

2. 修复导入与组件重名问题

  • 确保searchResults.js的组件命名唯一,比如别和其他组件都叫Search之类的
  • 在app/search/page.js里正确导入:
    import SearchResults from '../searchResults';
    
  • 如果searchResults.js是需要交互的客户端组件,记得在文件顶部加上'use client';指令

3. 客户端跳转逻辑检查

根目录的app/page.js作为客户端组件,跳转逻辑要确保正确:

'use client';
import { useRouter } from 'next/navigation';

export default function Home() {
  const router = useRouter();

  const handleSearch = (inputTerm) => {
    // 用encodeURIComponent处理特殊字符,避免参数解析错误
    router.push(`/search?term=${encodeURIComponent(inputTerm)}`);
  };

  // 这里写搜索表单的渲染和提交逻辑
}

4. 正确获取查询参数

在app/search/page.js里,直接用App Router自带的searchParams prop获取参数(不用加客户端指令,服务器组件就能用):

export default function SearchPage({ searchParams }) {
  const searchTerm = searchParams?.term || '';

  return <SearchResults term={searchTerm} />;
}

三、额外排查项

  • 确认Next.js版本:必须是13.4及以上,这是App Router稳定支持的起始版本
  • 清除开发缓存:执行next dev --clear-cache重启服务器,避免旧路由缓存干扰
  • 检查根layout.js:确保没有错误的布局逻辑阻止子路由渲染

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 18:30:16