È una buona idea racchiudere i componenti di tipografia UI di materiali in componenti H1, H2 ecc.?

1

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?

    
posta dwjohnston 14.11.2018 - 05:18
fonte

1 risposta

0

Questo non è diverso dal riutilizzo di snippet di codice template in un linguaggio di rendering lato server (talvolta chiamato "partial templates" o "partial"). La creazione di funzioni (o modelli riutilizzabili) per elementi di interfaccia utente comuni è una buona pratica quando quegli elementi comuni evolveranno tutti i loro stili e strutture insieme.

Ad esempio, se un pulsante richiede uno stile coerente applicato, non c'è niente di sbagliato nell'incapsulare questo in una funzione.

Quando hai identificato una buona astrazione, scrivi il codice per rinforzare quell'astrazione. È solo una pratica di base e buona per la codifica.

Questo non vuol dire che dovresti creare una funzione Button solo per generare un pulsante. Un ulteriore significato semantico dovrebbe guidare questa decisione. Ad esempio, un pulsante che quando viene cliccato mostra una finestra di conferma dovrebbe sempre apparire allo stesso modo e comportarsi nello stesso modo. Questo è un ottimo candidato per una funzione WarningButton(confirmationMessage) . Questo impone:

  1. Struttura HTML
  2. Stile comune
  3. Comportamento comune

Ciò presuppone che un cambiamento in uno dei tre punti precedenti debba essere applicato a tutti i pulsanti "di avviso" allo stesso modo.

    
risposta data 26.11.2018 - 16:39
fonte

Leggi altre domande sui tag