Adoro la libreria Material-UI, ma alcune cose che ho trovato fastidiose:
- Trovo che la tipografia sia troppo lunga per essere scritta, specialmente quando devo specificare elementi come gutterBottom, align, ecc. Mentre
<H1>
è molto più breve e posso sempre eseguire l'override manuale. - Con la tipografia - finisco per dover aggiungere una classe ad esso - se sarà contrastTextText su uno sfondo primario.
- Con i pulsanti, alla fine devo specificare la variante 'contenuta' ogni volta. Inoltre, se ho ragione ad allineare i pulsanti con
margin: "auto"
, e contengono un'icona, quindi devo anche applicare una proprietàdisplay
al pulsante per far sì che le cose si sistemino correttamente, e poi mi sto ripetendo. - Con i pulsanti, se voglio cambiare il colore contenuto predefinito (o non primario / non secondario), devo farlo manualmente.
- Con le carte, se il mio sito web ha uno stile di carta comune (cioè una certa elevazione e riempimento) attraverso il sito, devo ripetere l'elevazione ovunque, o ripetere i riferimenti a quel numero.
Qualcosa che ho preso in considerazione è l'astrazione di Material-UI in una libreria wrapper molto semplice, con qualcosa di simile.
function H1({ children, align = "center", ...rest }) {
return (
<Typography variant="h1" align={align} color="inherit" {...rest} >
{children}
</Typography>
)
}
export default H1
function MyCard({classes, children, elevation = 24, ...rest}) {
return (
<Card elevation = {elevation} {...rest}>
{children}
</Card>
)
}
e quindi usarlo in un componente come:
function MyComponent({classes}) {
return <MyCard className = {classes.root}>
<H1> Hello World! </H1>
</Card>
}
const styles = theme => ({
root: {
backgroundColor: theme.palette.primary.main,
color: theme.palette.primary.contrastText,
}
})
export default withStyles(styles)(MyComponent);
In pratica, evita di utilizzare direttamente i compo- nenti Materiale-UI.
È un modo standard di fare le cose, o c'è altrimenti un motivo per cui questa è una cattiva idea?