Next.js 13 App目录路由分组报错:Non matching path () provided for /(public)
解决Next.js路由分组报错“Non matching path () provided for /(public)”
这个报错通常出现在Next.js App Router模式下,和路由分组的结构或布局组件配置有关,以下是具体排查和解决步骤:
1. 检查路由分组文件夹命名
确保(public)分组文件夹的命名完全符合要求:
- 使用英文半角括号,不能是中文括号或全角括号
- 括号内的分组名不能为空(比如不能写成
()) - 分组文件夹直接放在
app目录下,层级正确
2. 验证布局组件的正确性
每个路由分组下的layout.jsx/tsx必须满足以下要求:
- 默认导出一个React组件
- 组件必须接收
children参数并渲染它 - 示例正确代码:
// app/(public)/layout.jsx export default function PublicLayout({ children }) { return ( <div className="public-container"> {/* 公共导航、页脚等 */} {children} </div> ); }
如果布局组件未正确接收或渲染children,会导致路由路径匹配失败。
3. 排查路由路径引用错误
路由分组的括号部分不会出现在实际URL中,比如(public)分组下的page.jsx对应根路径/,而不是/(public)。如果你的代码中(比如链接跳转、路由配置)错误地使用了/(public)作为路径,会触发该报错。
4. 检查全局布局与分组布局的冲突
如果app根目录下存在全局layout.jsx,它会作为所有路由分组的父布局,确保全局布局同样正确接收并渲染children,不要覆盖分组布局的路径匹配逻辑。
5. 确认Next.js版本兼容性
路由分组是Next.js 13.4+ App Router的稳定功能,如果你使用的是旧版本,可能存在兼容性问题,建议升级到最新稳定版。
正确的文件夹结构示例
app/ (auth)/ layout.jsx // 登录注册布局 login/ page.jsx register/ page.jsx (dashboard)/ layout.jsx // 后台面板布局 home/ page.jsx settings/ page.jsx (public)/ layout.jsx // 公共页面布局 page.jsx // 对应根路径 / about/ page.jsx layout.jsx // 可选全局布局(包裹所有分组)
内容的提问来源于stack exchange,提问作者Aziz Febriyanto
相关产品推荐
相关产品推荐

