🔧Setup
Start using TSS, with or without MUI
Introduced in v4.9
yarn add @mui/material @emotion/styled @emotion/react #Required for MUI
yarn add tss-react
import { tss } from "tss-react/mui";
import Button from "@mui/material/Button";
import { useState } from "react";
type Props = {
className?: string;
};
export function MyButton(props: Props) {
const { className } = props;
const [isClicked, setIsClicked] = useState(false);
const { classes, cx } = useStyles({ color: isClicked ? "blue": "red" });
//Thanks to cx, className will take priority over classes.root 🤩
//With TSS you must stop using clsx and use cx instead.
//More info here: https://github.com/mui/material-ui/pull/31802#issuecomment-1093478971
return (
<Button
className={cx(classes.root, className)}
onClick={()=> setIsClicked(true)}
>
hello world
</Button>
);
}
const useStyles = tss
.withParams<{ color: "red" | "blue"; }>()
.create(({ theme, color })=> ({
root: {
// The color of the text is either blue or red depending of
// the state fo the component.
color,
// When the curser is over the button has a black border
"&:hover": {
border: '4px solid black'
},
// On screens bigger than MD the button will have a big cyan border
[theme.breakpoints.up("md")]: {
border: '10px solid cyan'
}
}
}));
Last updated
Was this helpful?