reactjs - 在安装了 Material-UI 的 Next.js 项目中导入自定义谷歌字体
问题描述
对于我的生活,无法更改安装了 Material UI 的 Next.js 项目的默认字体样式。
这是_document.js
代码,我在 Head 中导入字体:
import React from "react";
import Document, { Html, Head, Main, NextScript } from "next/document";
import { ServerStyleSheets } from "@material-ui/core/styles";
import theme from "../src/theme";
export default class MyDocument extends Document {
render() {
return (
<Html lang="en">
<Head>
<link
rel="stylesheet"
href="https://fonts.googleapis.com/css2?family=Lobster&display=swap"
/>
</Head>
<body>
<Main />
<NextScript />
</body>
</Html>
);
}
}
MyDocument.getInitialProps = async (ctx) => {
const sheets = new ServerStyleSheets();
const originalRenderPage = ctx.renderPage;
ctx.renderPage = () =>
originalRenderPage({
enhanceApp: (App) => (props) => sheets.collect(<App {...props} />),
});
const initialProps = await Document.getInitialProps(ctx);
return {
...initialProps,
styles: [
...React.Children.toArray(initialProps.styles),
sheets.getStyleElement(),
],
};
};
这是_app.js
我将项目包装在主题中的代码:
import React from "react";
import PropTypes from "prop-types";
import Head from "next/head";
import { ThemeProvider } from "@material-ui/core/styles";
import CssBaseline from "@material-ui/core/CssBaseline";
import theme from "../src/theme";
export default function MyApp(props) {
const { Component, pageProps } = props;
React.useEffect(() => {
const jssStyles = document.querySelector("#jss-server-side");
if (jssStyles) {
jssStyles.parentElement.removeChild(jssStyles);
}
}, []);
return (
<React.Fragment>
<Head>
<title>My page</title>
<meta
name="viewport"
content="minimum-scale=1, initial-scale=1, width=device-width"
/>
</Head>
<ThemeProvider theme={theme}>
<CssBaseline />
<Component {...pageProps} />
</ThemeProvider>
</React.Fragment>
);
}
MyApp.propTypes = {
Component: PropTypes.elementType.isRequired,
pageProps: PropTypes.object.isRequired,
};
在theme.js
文件中,我设置了排版:
import { createTheme } from "@material-ui/core/styles";
// Create a theme instance.
const theme = createTheme({
typography: {
fontFamily: "'Lobster', sans-serif",
textTransform: "none",
},
});
export default theme;
我希望看到该项目更改为字体样式的龙虾。相反,它是机器人。
解决方案
推荐阅读
- maven - 无法在 Bitbucket 管道上解决 Maven 中的依赖关系
- python - 如何使用 jinja 和烧瓶将 url 传递给 img 标签
- node.js - VsCode clean Typescript 项目没有自动导入建议
- django - Django:根据用户是否创建了用户配置文件显示不同的导航栏选项?
- .net-core - Bitbucket Pipeline / .Net Core - 项目文件不存在
- html - li 标签中的图片不显示
- javascript - jsgrid 从 Web 服务加载数据
- javascript - 如何在我的 vuejs 代码中删除重复的重新初始化代码
- javascript - 将值从 html 表传递到输入 orm
- python - 在 PyQt 的子窗口中从父窗口访问数据