To style components using makeStyles and still have lifecycle methods in React Material UI, we call makeStyles outside our component.
And then we use the useStyles hook returned from makeStyles to apply the styles.
For instance, we write
import React, { useEffect, useState } from "react";
import axios from "axios";
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",
margin: theme.spacing(1),
},
highlight: {
backgroundColor: "red",
},
}));
const Welcome = ({ highlight }) => {
const [userName, setUserName] = useState("");
const [isAuthenticated, setIsAuthenticated] = useState(true);
const classes = useStyles();
//...
if (!isAuthenticated()) {
return <Redirect to="/" />;
}
return (
<Container
maxWidth={false}
className={highlight ? classes.highlight : classes.root}
>
<LogoButtonCard
buttonText="Enter"
headerText={isAuthenticated && `Welcome, ${userName}`}
buttonAction={login}
/>
</Container>
);
};
export default Welcome;
to call makeStyles with an object with the class names set to objects with the styles for each class name.
Then we call useStyles in Welcome to return the classes object.
And then we apply the styles to Container from the classes object in the className prop.