Как идиоматический c способ делать стилизацию в Material-UI? - PullRequest
2 голосов
/ 17 февраля 2020

Существует несколько способов создания стилей в Material-UI.

  1. Использование makeStyles:
import Box from '@material-ui/core/Box'
const useStyles = makeStyles(theme => ({
  testStyled: (props: isBoolean) => ({
    width: props ? '1px' : '2px',
  })
}))

<Box className={useStyles(true).root}></Box>
Использование MuiBoxProps:
import Box, { MuiBoxProps } from '@material-ui/core/Box'
let isTrue = true
let props: MuiBoxProps  = {
    style: {
        marginBottom: isTrue ? '1px' : '2px'
    }
}
<Box {...props}></Box>

Вторым способом я могу поставить специальный ввод для каждого отдельного компонента. Например:

let props: MuiBoxProps = {
   mb: '1px'
}

Вывод типа можно использовать для просмотра ошибок компиляции.

Однако этот метод неприменим к makeStyles, поскольку его тип возвращаемого значения всегда CSSProperties.

В первом случае, однако, я могу оформить их внутренне, добавив реквизиты.

Итак, в заключение:

  1. Вывод типа невозможен для конкретный c компонент. Может применяться реквизит в пакете.

  2. Вывод типа возможен для определенного c компонента. Нельзя применять реквизит в партии.

Какая официальная рекомендация?

1 Ответ

1 голос
/ 17 февраля 2020

На самом деле, не имеет значения, какой путь вы выберете, потому что оба есть в официальных документах. дело в том, каким способом или способом вам удобно.

Но да, я думаю, что лучший способ - это withSyles, который я также использую в своем коде профессионального развития.

Вот пример:

import React from 'react';
import PropTypes from 'prop-types';
import { withStyles } from '@material-ui/core/styles';
import Button from '@material-ui/core/Button';

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);
...