useSearchParams() 应该包裹在页面“/”处的悬念边界中

问题描述 投票:0回答:2

我在构建中收到错误,并显示以下消息: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(), 但后来我开始出现水合作用错误

next.js server-side-rendering build-error
2个回答
0
投票

我不确定你所说的水合错误是什么意思,但是当你将

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 状态移至组件,效率会更高。这样做可以改善服务器对页面的预渲染,从而带来更好的用户体验。


0
投票

如果您的组件不是异步的,则没有理由将组件包装在

Suspense
包装器中... 尤其是 如果它是整个页面。相反,依赖 Next 的
loading.tsx
文件结构,并在
src
目录的根目录中创建一个具有该名称的文件,并使用您当前在着陆页的
Suspense
包装器中使用的占位符填充该文件。

© www.soinside.com 2019 - 2024. All rights reserved.