我在构建中收到错误,并显示以下消息:useSearchParams() 应包含在页面“/404”处的悬念边界中。了解更多:https://nextjs.org/docs/messages/missing-suspense-with-csr-bailout
预渲染页面“/_not-found”时发生错误。了解更多:https://nextjs.org/docs/messages/prerender-error
⨯ useSearchParams() 应该包裹在页面“/”处的悬念边界中。了解更多:https://nextjs.org/docs/messages/missing-suspense-with-csr-bailout
预渲染页面“/”时发生错误。了解更多:https://nextjs.org/docs/messages/prerender-error
✓ 生成静态页面(4/4)
导出在以下路径上遇到错误: /_未找到 /页:/
这是github代码:https://github.com/JuliocesarWpedro/ecommerce
当我在布局中的 ContextProductsProvider 周围放置一个悬念时,我可以修复此错误,该布局使用 useSearchParams(), 但后来我开始出现水合作用错误
我不确定你所说的水合错误是什么意思,但是当你将
ContextProductsProvider
包裹在 Suspense
组件中时,它就可以工作了。
确保从
export
SimpleFallback
src/components/ContextProductsProvider.tsx
在您的
src/app/layout.tsx
中添加:
import {
ContextProductsProvider,
SimpleFallback,
} from "@/components/ContextProductsProvider";
...
<body className={saira.className} style={{ scrollBehavior: "smooth" }}>
<Suspense fallback={<SimpleFallback />}>
<ContextProductsProvider>
<Header />
{children}
</ContextProductsProvider>
</Suspense>
<Footer />
</body>
...
如果将 searchParams 状态移至组件,效率会更高。这样做可以改善服务器对页面的预渲染,从而带来更好的用户体验。
如果您的组件不是异步的,则没有理由将组件包装在
Suspense
包装器中... 尤其是 如果它是整个页面。相反,依赖 Next 的 loading.tsx
文件结构,并在 src
目录的根目录中创建一个具有该名称的文件,并使用您当前在着陆页的 Suspense
包装器中使用的占位符填充该文件。