我如何知道我是在代码中的客户端组件还是服务器组件上。Nextjs 13 Beta 应用程序目录

le *_*anh 6 next.js next.js13

例如,我有一段代码来检查我是客户端还是服务器以具有适当的逻辑。

例如。我可以使用 isClient 知道我位于客户端组件中。

Ahm*_*bai 2

服务器组件:app 目录内的所有组件默认都是 React Server 组件,包括特殊文件和共置组件。

客户端组件使您能够向应用程序添加客户端交互性。在 Next.js 中,它们在服务器上预渲染并在客户端上进行水化。您可以将客户端组件视为 Next.js 12 及之前版本的工作方式

在下一个官方文档中了解更多信息

如果您想在运行时知道组件是在服务器还是客户端上呈现。您可以检查是否window已定义:

const componentType = typeof window === 'undefined' ? 'server' : 'client';
Run Code Online (Sandbox Code Playgroud)

window 对象是对浏览器中打开的窗口的引用。因此,window对象仅在客户端可用

  • 嘿艾哈迈德,这绝对是朝着正确方向迈出的一步。唯一的问题是它并不总是准确,具体取决于组件的渲染方式(即 SSR、ISR、SSG 等)。即使“客户端组件”如果在重新水合之前最初在服务器上渲染,也会有未定义的窗口。 (3认同)