每当我尝试将 makeStyles()
与具有生命周期方法的组件一起使用时,都会出现以下错误:
无效的挂钩调用。钩子只能在函数组件的主体内部调用。这可能由于以下原因之一而发生:
- 你可能有不匹配的 React 版本和渲染器(例如 React DOM)
- 您可能违反了 Hooks 规则
- 你可能在同一个应用程序中拥有多个 React 副本
下面是产生此错误的代码的一个小示例。其他示例也将类分配给子项。我在 MUI 的文档中找不到任何显示其他使用方法的内容 makeStyles
并且能够使用生命周期方法。
import React, { Component } from 'react';
import { Redirect } from 'react-router-dom';
import { Container, makeStyles } from '@material-ui/core';
import LogoButtonCard from '../molecules/Cards/LogoButtonCard';
const useStyles = makeStyles(theme => ({
root: {
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
},
}));
const classes = useStyles();
class Welcome extends Component {
render() {
if (this.props.auth.isAuthenticated()) {
return <Redirect to="/" />;
}
return (
<Container maxWidth={false} className={classes.root}>
<LogoButtonCard
buttonText="Enter"
headerText="Welcome to PlatformX"
buttonAction={this.props.auth.login}
/>
</Container>
);
}
}
export default Welcome;
原文由 Matt Weber 发布,翻译遵循 CC BY-SA 4.0 许可协议
我们最终做的是停止使用类组件并创建功能组件, 使用来自 Hooks API 的
useEffect()
生命周期方法。这使您仍然可以将makeStyles()
与 Lifecycle Methods 一起使用, 而不会增加制作高阶组件的复杂性。这要简单得多。例子: