亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

使用"use client"指令在文件頂部添加,TypeError: createContext僅適用于客戶端組件
P粉811349112
P粉811349112 2023-10-25 22:01:11
0
2
1086

我創(chuàng)建了一個(gè)全新的 Next.js 應(yīng)用程序,它使用 app 文件夾。然后我安裝了 Materiel UI 并開始使用文檔中給出的示例。但我收到此錯(cuò)誤:

類型錯(cuò)誤:createContext 僅適用于客戶端組件。在文件頂部添加“use client”指令以使用它。

這是我的代碼中文檔的示例:

import Button from "@mui/material/Button";

export default function Home() {
  return (
    <div>
      <Button variant="contained">Hello World</Button>
    </div>
  );
}

我希望該按鈕顯示在我的頁面上。我知道在頂部添加 "use client" 將修復(fù)錯(cuò)誤,但我希望我的頁面在服務(wù)器上渲染。

P粉811349112
P粉811349112

全部回復(fù)(2)
P粉642436282

要讓 MUI 與 SSR 完美配合,您需要做一些調(diào)整:https://github.com/mui/material-ui/tree/master/examples/material-next-app-router-ts 。

注意:即使您配置正確,按鈕也可以在服務(wù)器端呈現(xiàn),但您無法分配 onClick 處理程序(如果我沒記錯(cuò)的話)

P粉502608799

顯然,您要導(dǎo)入的按鈕正在使用客戶端掛鉤,在本例中為createContext。為此,您需要在文件頂部添加“use client”。但這意味著該頁面成為客戶端組件,并且沒有不再是服務(wù)器組件。

如果這讓您煩惱,您可以在與 app 同一級(jí)別創(chuàng)建一個(gè) lib 文件夾,在其中添加 mui.js 文件,如下所示:

// lib/mui.js

"use client";

export * from "@mui/material";

然后您從那里導(dǎo)入它(這樣,頁面的其他部分仍然是服務(wù)器組件):

// app/page.js

import { Button } from "../lib/mui";

export default function Home() {
  return (
    <div>
      <Button variant="contained">Hello World</Button>
    </div>
  );
}

旁注,您在設(shè)置上下文時(shí)可能會(huì)遇到類似的錯(cuò)誤。這意味著您正在嘗試在服務(wù)器組件中設(shè)置它。 指南是將其添加到其自己的“使用客戶端”標(biāo)記文件中:

// app/theme-provider.tsx

"use client";

import { createContext } from "react";

export const ThemeContext = createContext("");

export default function ThemeProvider({ children }) {
  return (
    <ThemeContext.Provider value="dark">
      {children}
    </ThemeContext.Provider>
  );
}

并從那里導(dǎo)入它:

// app/layout.js

import ThemeProvider from './theme-provider';
 
export default function RootLayout({ children }) {
  return (
    <html>
      <body>
        <ThemeProvider>{children}</ThemeProvider>
      </body>
    </html>
  );
}

要獲得更詳細(xì)的答案,請(qǐng)查看此 線程。

最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板