githubEdit

withStyles

It's like the material-ui v4 higher-order component APIarrow-up-right but type safe by design.

circle-info

Using as constarrow-up-right can often helps when you get red squiggly lines.

MyComponent.tsx
import { withStyles } from "tss-react/mui";

type Props = {
    className?: string;
    classes?: Partial<Record<"root" | "text", string>>;
    colorSmall: string;
};

function MyComponent(props: Props) {

    const classes = withStyles.getClasses(props);

    return (
      // props.classeName and props.classes.root are merged, props.className get higher specificity
      <div className={classes.root}>
        <span className={classes.text}>The background color should be different when the screen is small.</span>
      </div>
    );
}

const MyComponentStyled = withStyles(
    MyComponent, 
    (theme, props) => ({
        root: {
            backgroundColor: theme.palette.primary.main,
            height: 100
        },
        text: {
            border: "1px solid red"
        },
        "@media (max-width: 960px)": {
            root: {
                backgroundColor: props.colorSmall
            }
        }
    })
);

export default MyComponentStyled;

If you have your styles defined as a separate function:

With no classes props

Your component can also only have a className prop (and no classes).

With a MUI component

You can also pass a mui component like for example <Button /> and you'll be able to overwrite every rule name of the componentarrow-up-right (it uses the classes prop).

What's very powerfull about the withStyles API it it's capable to infer the type of the nested overwritable classes, example:

With an base HTML component

You can experiment with those examples herearrow-up-right live herearrow-up-right, you can also run it locally with yarn start_spaarrow-up-right.

Naming the stylesheets (useful for debugging and theme style overrides)

To ease debugging you can specify a name that will appear in every class names. It is like the option.name in material-ui v4's makeStylesarrow-up-right.

It's also required to for theme style overrides.

Use in place of styled

If you want to use withStyles instead of styled for the extra type safety it provides:

Before:

After (just wrap everything into root):

Last updated

Was this helpful?