Longtime C# dev, just starting nextjs for a client.
I'm using MUI, and basically have a day of work in, so my project is pretty small. I have a decent handle on how SSR works conceptually, but implementation is throwing me for a weird loop.
Here's my layout.js:
<!-- language:javascript -->
import "./globals.css";
import {
Drawer,
ListItemButton,
ListItemIcon,
ListItemText,
List,
AppBar,
Toolbar,
Typography,
Box,
} from "@mui/material";
import AssessmentIcon from "@mui/icons-material/Assessment";
import AddIcon from "@mui/icons-material/Add";
import FormatListBulletedIcon from "@mui/icons-material/FormatListBulleted";
import zIndex from "@mui/material/styles/zIndex";
import { theme } from "./theme";
import { ThemeProvider } from "@mui/material/styles";
const navItems = [
{ name: "Create New", icon: <AddIcon />, url: "todo" },
{ name: "View all", icon: <FormatListBulletedIcon />, url: "todo" },
{ name: "Dashboard", icon: <AssessmentIcon />, url: "todo" },
];
const getNav = () => {
console.log(navItems);
return (
<List>
{navItems.map((item, index) => (
<ListItemButton className="navbutton" href={item.url} key={index}>
<ListItemIcon>{item.icon}</ListItemIcon>
<ListItemText>{item.name}</ListItemText>
</ListItemButton>
))}
</List>
);
};
export const metadata = {
title: "Create Next App",
description: "Generated by create next app",
};
export default function RootLayout({ children }) {
return (
<html lang="en">
<body>
<ThemeProvider theme={theme}>
<AppBar position="relative" sx=>
<Toolbar>
<Typography varient="h4">
--client info--
</Typography>
</Toolbar>{" "}
</AppBar>
<Drawer anchor={"left"} variant="permanent">
{getNav()}
</Drawer>
<main>{children}</main>
</ThemeProvider>
</body>
</html>
);
}
and my friendly little theme.js:
<!-- language:javascript -->
import { createTheme } from "@mui/material/styles";
export default theme = createTheme({
typography: {
allVariants: {
fontFamily: "Trebuchet MS",
},
},
});
I'm consistently getting "Error: Attempted to call createTheme() from the server but createTheme is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."
I don't really understand the why here. I've tried a few variations of UseEffect and "use client";.
As I understand it.... this font should render server side? Right? I feel like I'm taking crazy pills.
Thanks in advance
Tried use client syntax, more strange errors, I think fundamentally this should be rendered server side and I don't understand the meaning of the error.
Via Active questions tagged javascript - Stack Overflow https://ift.tt/FwU4g8N
Comments
Post a Comment