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)
这是我第一次创建服务器和客户端应用程序,因此对这个主题的任何澄清将不胜感激。
一一回答你的问题:
Chakra UI 组件仅是客户端,我不确定它们在代码公开方面如何与服务器组件交互。
正如您正确提到的,Chakra UI 组件仅是客户端的。要将 Chakra UI 与服务器组件一起使用,您需要通过在文件顶部添加“use client”指令将服务器组件转换为客户端组件。转换后,组件成为客户端组件,只暴露客户端逻辑,不暴露服务器端逻辑。
具体来说,我想知道在布局文件中使用“use client”指令是否也可能会暴露其他文件中的代码逻辑。
如果您使用客户端组件,则只有这些组件才会在客户端呈现。只要正确隔离并且不与客户端代码混合,其他文件或组件(例如服务器组件)中存在的服务器端逻辑就不会暴露给客户端。请注意,在最新版本的 next.js (v13.4) 中,app 目录下的组件默认为“服务器组件”,因此,只有标记为“使用客户端”的组件才被视为客户端组件。
例如,如果我的索引文件具有确定呈现哪些 html 或哪些组件的逻辑(或导入带有逻辑的组件),那么该逻辑是否也会发送到客户端,或者客户端只是接收 html?
如果索引文件或其他组件中确定呈现哪些 HTML 或组件的任何逻辑是服务器组件的一部分,则不会将其发送到客户端。客户端只会收到生成的 HTML 内容。
总之,只要您保持服务器端和客户端组件之间的明确分离,您就不必担心将敏感的服务器端代码暴露给客户端。
| 归档时间: |
|
| 查看次数: |
1514 次 |
| 最近记录: |