Perché styled-components rimane ancora una scelta conveniente per React
Ripercorri come appariva il layout in React circa sette anni fa. Abbiamo cercato invano di isolare le classi CSS attraverso BEM, poi ci siamo spostati su CSS Modules, e infine è arrivato styled-components. L'idea di scrivere stili direttamente nei file JS sembrava selvaggia all'inizio. I template literal JavaScript hanno rapidamente trasformato questo approccio in uno degli standard dello sviluppo web.
Al giorno d'oggi, Tailwind CSS e i framework CSS atomici sono molto diffusi. Nel frattempo, la repository di styled-components ha raccolto oltre 41mila stelle su GitHub e continua a essere aggiornata. Gli sviluppatori lo usano attivamente per il layout, e i manutentori del progetto adattano il codice per le funzionalità attuali di React, inclusi i React Server Components (RSC).
Perché sostituire i CSS familiari con i template literal
Il concetto della libreria è semplice: crei un componente React che contiene già tutti gli stili necessari. Non c'è bisogno di ideare gerarchie di classi complesse né di preoccuparti che gli stili base dei pulsanti possano accidentalmente rompere un modal dall'altra parte dell'app.
La sintassi rimane CSS pulito senza virgolette e virgole dopo ogni riga:
import styled from 'styled-components';
const Button = styled.button`
background: ${props => props.$primary ? "#0070f3" : "#ffffff"};
color: ${props => props.$primary ? "#ffffff" : "#0070f3"};
font-size: 1em;
margin: 1em;
padding: 0.25em 1em;
border: 2px solid #0070f3;
border-radius: 3px;
`;
export default function App() {
return (
<div>
<Button>Обычная кнопка</Button>
<Button $primary>Акцентная кнопка</Button>
</div>
);
}
Gli stili sono strettamente legati al componente. Rimuovi Button dal progetto e i suoi stili scompaiono con esso. Nessun codice inutilizzato permane nel build finale.
Props, temi e aspetto dinamico
Il punto forte del CSS-in-JS si rivela dove la presentazione visiva dipende direttamente dai dati o dallo stato dell'applicazione. Con CSS Modules, avresti dovuto alternare continuamente le classi attraverso l'utility classnames. Qui, le props vengono passate direttamente nel blocco di stile.
Passaggio di parametri senza conflitti con il DOM
Nota la sintassi $primary dell'esempio qui sopra. Il simbolo del dollaro denota le transient props. Le variabili contrassegnate in questo modo vengono utilizzate all'interno degli stili, ma la libreria le filtra e non le passa al tag HTML finale. La console del browser rimane pulita senza avvisi su attributi sconosciuti.
Theming integrato
Per lavorare con temi chiari e scuri, c'è il componente ThemeProvider. Passa l'oggetto delle impostazioni lungo l'albero dei componenti usando React Context.
import styled, { ThemeProvider } from 'styled-components';
const theme = {
colors: {
main: '#0070f3',
background: '#f4f4f4',
}
};
const Container = styled.div`
color: ${props => props.theme.colors.main};
background: ${props => props.theme.colors.background};
`;
Sostituisci i colori nell'oggetto theme e l'interfaccia si aggiorna istantaneamente. Questo semplifica notevolmente la costruzione di sistemi di design personalizzati.
Performance e rendering lato server
La libreria tiene traccia automaticamente di quali componenti vengono visualizzati sulla pagina in qualsiasi momento e carica solo i loro stili. L'utente non scarica codice extra.
In precedenza, le soluzioni CSS-in-JS erano criticate per il carico extra durante l'hydration e i problemi con SSR. Nelle versioni recenti, il team ha riscritto la logica interna. La libreria può funzionare con streaming SSR e si integra bene con React Server Components. Gli stili vengono incorporati direttamente nel flusso HTML senza ritardi.
Quando usare styled-components
Ecco quattro scenari in cui la libreria eccelle:
- Stai costruendo una libreria di componenti UI interna o un sistema di design con personalizzazione flessibile.
- Il progetto contiene molti elementi interattivi complessi il cui stato visivo cambia in base ai dati di input.
- Il team è abituato alla sintassi CSS classica ma vuole un isolamento degli stili affidabile senza configurare i build tool.
- Stai scrivendo un progetto multipiattaforma con React e React Native, aspettandoti di usare una singola API per gli stili.
Se la tua priorità è lanciare l'app su dispositivi a bassa potenza con un bundle JS minimo, potresti voler guardare Tailwind CSS o soluzioni zero-runtime come Linaria e Pigment CSS.
styled-components rimane una soluzione chiara e prevedibile. La libreria elimina il mal di testa della denominazione delle classi e ti offre CSS pulito direttamente nel corpo del componente. Per la maggior parte dei task frontend, la potenza dello strumento è più che sufficiente.
Progetti correlati