javascript - Next JS 在刷新之前无法正确加载 Material UI 样式
问题描述
编辑: 可重现的错误https://github.com/ganavol409/next-material-ui-classes-bug
似乎与 HoC 组件一起发生,并且都从 Material UI 导入 useStyles
已实施的内容:
https://github.com/mui-org/material-ui/blob/master/examples/nextjs/pages/_document.js + 下一个带有材质ui和材质样式的js项目
当前行为:
页面 css(特别是 Material UI 中的“类”字段)在来自 Next JS Link/Next JS Router 模块时不会加载。刷新“类”字段加载后
预期行为:
如果用户来自 Next JS Link/Next JS Router 模块或手动输入网站地址,则所有 css 加载(当前仅在用户手动写入或刷新网站/页面时才有效)
代码:
<Container maxWidth="sm" disableGutters classes={{ maxWidthSm: classes.smContainerWidth }}>
...
</Container>
smContainerWidth: {
maxWidth: '750px'
},
useEffect(() => {
router.push('/');
}, []);
如果用户来自 Next JS Link/Next JS Router 而不是 750px,则容器将加载默认的 600px 宽度,并且在用户刷新后容器将为 750px 宽度
自动路由器推送
解决方案
我已经复制了您的示例,但我没有这种行为。750px 最大宽度在您重新加载页面时起作用,而且在您单击下一个链接以转到该页面时也起作用。
编辑:
我认为您的问题不是来自 HoC,而只是来自导入makeStyles
已经在 2 个不同页面中调用的文件。
要解决它,您可以导出一个函数,该函数在调用时将调用 makeStyles:
// in styles.js
const useStylesCreator = () => {
return makeStyles((theme) => {
return {
hoverElevationCapitalizeButton: {
padding: "9px 23.1px",
textTransform: "none",
"&:hover": {
boxShadow:
"0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12)",
},
},
};
});
};
export default useStylesCreator;
// in your components
const Login = HoCA(() => {
const classes = useStylesCreator()();
...
或者,可能更优雅,您可以导出包含样式的对象,并makeStyles
仅在导入组件文件后调用:
// in styles.js
const styles = {
hoverElevationCapitalizeButton: {
padding: "9px 23.1px",
textTransform: "none",
"&:hover": {
boxShadow:
"0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12)",
},
},
};
export default styles;
// in your components
const useStyles = makeStyles((theme) => styles);
const Login = HoCA(() => {
const classes = useStyles();
...
推荐阅读
- typescript - 使用 TypeScript 会使 apk 大小变大?
- css - 如何使css具有每行始终具有相同高度的反应列
- php - 如何通过laravel中的api对Web登录页面进行身份验证
- angular - 为什么 IdentityServer 4 代码流在一段时间后得到 invalid_grant 响应?
- android - android 10中的后台服务每10分钟获取一次位置
- flutter - 颤振将日期时间转换为字符串在午夜失败
- android - Textstyle 在发布时没有唤醒
- string - 如何使用 Flutter TextFormField 在行开头和结尾进行缩进和缩进
- html - 为什么我的图标没有显示在 HTML 网站中?
- python - 如何在文本中查找特定单词并使用python对其进行计数?