如何知道 Nextjs 13 中是否使用了 SSR/SSG?

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

所以我想在使用样式组件时实现主题,为此你必须使用使用 Context 的 ThemeProvider,因此它不能位于服务器端组件中,但根据文档 ThemeProvider 应该是布局中的顶级组件。这意味着我必须使 Layout.tsx 成为客户端组件。

所以我所做的是创建了一个provider.tsx组件并将其制作成客户端组件

provider.tsx

"use client";

import { ThemeProvider } from "styled-components"; 
import { darkTheme, lightTheme, GlobalStyles } from "@/themeConfig";

const Providers = ({ children }: { children: React.ReactNode }) => {
    return ( 
        <ThemeProvider theme={lightTheme}> 
            <GlobalStyles /> {children} 
        </ThemeProvider>   
    ); 
};
export default Providers;

然后在 Layout.tsx

中使用它
import "./globals.css";
import StyledJsxRegistry from "@/lib/registry";
import Providers from "@/lib/providers"; 
import { Inter } from "next/font/google";

const inter = Inter({ subsets: ["latin"] });

export default function RootLayout({children}: {children: React.ReactNode;}) { 
    return ( 
        <html lang="en"> 
            <StyledJsxRegistry> 
                <Providers> 
                    <body className={inter.className}>{children}</body> 
                </Providers> </StyledJsxRegistry> 
        </html>   
    ); 
}

现在我想知道的是,由于 Providers 是一个客户端组件并且是整个页面/应用程序的父组件,这是否意味着每个子组件也将是一个客户端组件,如果不是,那么这是否是在 NextJs13 中实现主题的正确方法使用样式化组件,同时保持 SSR 活跃?如何准确知道是否正在使用 SSR?

styled-components server-side-rendering next.js13 theming
1个回答
0
投票

只需控制台记录即可。如果它在服务器上渲染,它将显示在服务器日志中。如果在客户端上渲染,它将显示在浏览器日志中

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