正如您所说,在文件顶部添加"use client"
可以解决您的问题.但这将意味着页面会变成Client Component,失go Server Component的好处.
如果这让您感到困扰,例如,您可以在与app
相同的级别创建一个lib
文件夹,在其中添加一个mui.js
文件,如下所示:
// lib/mui.js
"use client";
export * from "@mui/material";
然后你从那里导入Button
美元:
// app/page.js
import { Button } from "../lib/mui";
export default function Home() {
return (
<div>
<Button variant="contained">Hello World</Button>
</div>
);
}
附注,您在设置上下文时可能会遇到类似的错误.这意味着您试图在服务器组件中设置它.guideline要把它添加到自己的"use client"
标记的文件中:
// 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>;
}
并从那里导入:
// app/layout.js
import ThemeProvider from './theme-provider';
export default function RootLayout({ children }) {
return (
<html>
<body>
<ThemeProvider>{children}</ThemeProvider>
</body>
</html>
);
}