Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

custom style issue when migrating material ui v4 to v5

In our current react app, we are using material ui v4, we have following customized style:

const useStyles = makeStyles((theme) =>
  createStyles({
    dob: {
      color: theme.palette.grey[300],
    },
    location: {
      color: theme.palette.grey[300],
    },
  })
)

And in our component, we have

<Box>
...
<Typography className={classes.dob} variant="caption">
                      {formatDateTime(
                        person.dateOfBirth,
                        "M/D/YYYY HH:mm:ss A"
                      )}
</Typography>
<Typography className={classes.location} variant="caption">
                    {props.person.location}
</Typography>
...
</Box>

Now we are upgrading to v5. In the migration guide, it recommended to use sx, but I got an error with theme

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

<Typography sx={{theme.palette.grey[300]}} variant="caption">
                        {props.person.location}
</Typography>

Does any know how do I fix this? In addition, I wonder if I could use styled() to create a custom style on a material ui components, such as Box, Appbar, etc. The examples provided in the guide only for generic html elements, such as div, span. For example:

const MyTypograhy = styled('Typography')(({ theme }) => ({
  color: theme.palette.primary.main,
}))

>Solution :

sx could act like inline style, so you must provide the data type, and if you want to use theme, you must pass as a function with theme is the first parameter

<Typography sx={{ color: theme => theme.palette.grey[300] }} variant="caption">
  {props.person.location}
</Typography>

And yes you could create custom component based on existing MUI component

const CustomBox = styled(Box)((theme) => ({
  padding: "2rem",
  background: "black"
}));

Codesandbox Demo

Edit cool-snow-fhzpsi

References

The sx prop

Style library interoperability

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading