Если стили специфичны для компонента, то лучше сохранить стили с этим компонентом и использовать классы, как вы это сделали.
Если стили или функции совместно используются компонентами, лучше всего их импортировать.
Из-за роста популярности css-in-js Material UI переместился в сторону Material UI CSS в подходе js .
Библиотека в стиле была одной из первых, кто применил этот подход, и стал популярным, поскольку разработчикам понравился подход к использованию теговых литералов шаблонов. Он хорошо связан с React.
Существует 3 разных API, похоже, что вы используете Hook API
import React from 'react';
import { makeStyles } from '@material-ui/styles';
import Button from '@material-ui/core/Button';
const useStyles = makeStyles({
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',
},
});
export default function Hook() {
const classes = useStyles();
return <Button className={classes.root}>Hook</Button>;
}
Вы также можете использовать API компонента Styled. Пример приведен ниже для пользовательского интерфейса материала, который применяет стили внутри компонента, что полезно, если стили меняются в зависимости от условий, например, от того, какие реквизиты передаются. В этом случае целесообразно инкапсулировать логику внутри этого компонента, а не импортирующего и внешнего класса.
import React from 'react';
import { styled } from '@material-ui/styles';
import Button from '@material-ui/core/Button';
// Like https://github.com/brunobertolini/styled-by
const styledBy = (property, mapping) => props => mapping[props[property]];
const MyButton = styled(({ color, ...other }) => <Button {...other} />)({
background: styledBy('color', {
red: 'linear-gradient(45deg, #FE6B8B 30%, #FF8E53 90%)',
blue: 'linear-gradient(45deg, #2196F3 30%, #21CBF3 90%)',
}),
border: 0,
borderRadius: 3,
boxShadow: styledBy('color', {
red: '0 3px 5px 2px rgba(255, 105, 135, .3)',
blue: '0 3px 5px 2px rgba(33, 203, 243, .3)',
}),
color: 'white',
height: 48,
padding: '0 30px',
});
function AdaptingStyledComponents() {
return (
<div>
<MyButton color="red">Red</MyButton>
<br />
<br />
<MyButton color="blue">Blue</MyButton>
</div>
);
}
export default AdaptingStyledComponents;
В этом сценарии лучше сохранить стили внутри этого компонента. Таким образом, в целом это баланс между импортом общих стилей и применением локальных стилей.