将 Chakra UI 与 Next.js 13 服务器组件结合使用是否会向客户端公开服务器端代码逻辑?

Big*_*s01 5 javascript reactjs server-side-rendering next.js chakra-ui

我正在开发一个项目,使用 Next.js 13 和服务器组件以及 Chakra UI 进行样式设置。我主要关心的是在使用应用程序/布局功能时保护敏感的服务器端代码逻辑不暴露给客户端。

Chakra UI 组件仅是客户端,我不确定它们在代码公开方面如何与服务器组件交互。具体来说,我想知道在布局文件中使用“use client”指令是否也可能会暴露其他文件中的代码逻辑。例如,如果我的索引文件具有确定呈现哪些 html 或哪些组件的逻辑(或导入带有逻辑的组件),那么该逻辑是否也会发送到客户端,或者客户端只是接收 html?

这是我的布局文件的示例:

"use client";

import { ChakraProvider } from "@chakra-ui/react";
import { CacheProvider } from "@chakra-ui/next-js";

export default function RootLayout({ children }) {
  return (
    <html lang="en">
      <body>
        <CacheProvider>
          <ChakraProvider>{children}</ChakraProvider>
        </CacheProvider>
      </body>
    </html>
  );
}
Run Code Online (Sandbox Code Playgroud)

这是我第一次创建服务器和客户端应用程序,因此对这个主题的任何澄清将不胜感激。

Kat*_* Ok 2

一一回答你的问题:

Chakra UI 组件仅是客户端,我不确定它们在代码公开方面如何与服务器组件交互。

正如您正确提到的,Chakra UI 组件仅是客户端的。要将 Chakra UI 与服务器组件一起使用,您需要通过在文件顶部添加“use client”指令将服务器组件转换为客户端组件。转换后,组件成为客户端组件,只暴露客户端逻辑,不暴露服务器端逻辑。

具体来说,我想知道在布局文件中使用“use client”指令是否也可能会暴露其他文件中的代码逻辑。

如果您使用客户端组件,则只有这些组件才会在客户端呈现。只要正确隔离并且不与客户端代码混合,其他文件或组件(例如服务器组件)中存在的服务器端逻辑就不会暴露给客户端。请注意,在最新版本的 next.js (v13.4) 中,app 目录下的组件默认为“服务器组件”,因此,只有标记为“使用客户端”的组件才被视为客户端组件。

例如,如果我的索引文件具有确定呈现哪些 html 或哪些组件的逻辑(或导入带有逻辑的组件),那么该逻辑是否也会发送到客户端,或者客户端只是接收 html?

如果索引文件或其他组件中确定呈现哪些 HTML 或组件的任何逻辑是服务器组件的一部分,则不会将其发送到客户端。客户端只会收到生成的 HTML 内容。

总之,只要您保持服务器端和客户端组件之间的明确分离,您就不必担心将敏感的服务器端代码暴露给客户端。