Material UI - createStyles + makeStyles

yhko1992·2022년 3월 9일
0

REACT JS - STYLE

목록 보기
4/4
post-thumbnail

MUI에서 제공하는 withStyles(HOC)로 함수 컴포넌트에 스타일링을 하려고 했으나 classes props가 전달되지 않았다. 공식문서를 보니 propType에 추가해줘야 할 게 있었다.

const styles = {
  root: {
    background: 'linear-gradient(45deg, #FE6B8B 30%, #FF8E53 90%)',
    border: 0,
    borderRadius: 3,
    boxShadow: '0 3px 5px 2px rgba(255, 105, 135, .3)',
    color: 'white',
    height: 48,
    padding: '0 30px',
  },
};

function HigherOrderComponent(props) {
  const { classes } = props;
  return <Button className={classes.root}>Higher-order component</Button>;
}

HigherOrderComponent.propTypes = {
  classes: PropTypes.object.isRequired,
};

export default withStyles(styles)(HigherOrderComponent);

요렇게 하면 된다.

근데 공식문서를 찾아보니 또 다른방법을 사용할 수 도 있다는 것을 알아냈다. 바로 createStyles와 makeStyles를 이용하는 것이다.

일단 코드부터.

import { makeStyles } from '@mui/styles';

const useStyles = makeStyles({
  // style rule
  foo: (props) => ({
    backgroundColor: props.backgroundColor,
  }),
  bar: {
    // CSS property
    color: (props) => props.color,
  },
});

function MyComponent() {
  // Simulated props for the purpose of the example
  const props = {
    backgroundColor: 'black',
    color: 'white',
  };
  // Pass the props as the first argument of useStyles()
  const classes = useStyles(props);

  return <div className={`${classes.foo} ${classes.bar}`} />;
}

요런식으로 Hook 처럼 사용가능하다. useStyles에 props을 통과시켜 사용할 수 도 있다.

끝!

profile
'과연 이게 최선일까?' 끊임없이 생각하기

0개의 댓글