Frontend

Dare stile ai componenti React

Autore

Manuel Ricci

Gestire gli stili dei componenti in React è un aspetto fondamentale dello sviluppo front-end, permettendo di creare applicazioni visivamente accattivanti e coerenti. Esistono vari approcci per gestire gli stili in React, ognuno con i suoi pro e contro. Ecco una panoramica delle tecniche più comuni:

CSS tradizionale e file CSS

Il metodo più semplice è utilizzare i file CSS tradizionali. Ogni componente React può avere un file CSS corrispondente che definisce i suoi stili. Questo approccio è semplice e diretto, ma può portare a conflitti di nomi e rendere difficile la manutenzione per progetti di grandi dimensioni.

1/* Button.css */
2.button {
3  background-color: blue;
4  color: white;
5  padding: 10px 15px;
6  border-radius: 5px;
7  border: none;
8  cursor: pointer;
9}
1// Button.tsx
2import React from 'react';
3import './Button.css';
4
5const Button: React.FC = () => {
6  return <button className="button">Click Me</button>;
7};
8
9export default Button;

2. CSS Modules

I CSS Modules risolvono molti dei problemi associati al CSS tradizionale, come i conflitti di nomi, incapsulando gli stili a livello di componente. Quando si utilizzano CSS Modules, i nomi delle classi vengono automaticamente generati in modo univoco, evitando collisioni. Questo metodo consente di mantenere i fogli di stile vicino ai componenti a cui si applicano, facilitando la manutenzione e migliorando la modularità.

1/* Button.module.css */
2.button {
3  background-color: red;
4  color: white;
5  padding: 10px 20px;
6  border-radius: 5px;
7  border: none;
8  cursor: pointer;
9}
1// Button.tsx
2import React from 'react';
3import styles from './Button.module.css';
4
5const Button: React.FC = () => {
6  return <button className={styles.button}>Click Me</button>;
7};
8
9export default Button;

3. Styled-components

styled-components è una libreria che permette di scrivere codice CSS all'interno dei componenti React utilizzando i template literals di ES6. Questo approccio consente di sfruttare tutta la potenza di JavaScript per creare stili dinamici basati sulle props o sullo stato dei componenti. Gli stili sono anche automaticamente scoping al componente, evitando conflitti.

1// Button.tsx
2import React from 'react';
3import styled from 'styled-components';
4
5const StyledButton = styled.button`
6  background-color: green;
7  color: white;
8  padding: 10px 20px;
9  border-radius: 5px;
10  border: none;
11  cursor: pointer;
12
13  &:hover {
14    background-color: darkgreen;
15  }
16`;
17
18const Button: React.FC = () => {
19  return <StyledButton>Click Me</StyledButton>;
20};
21
22export default Button;

4. Emotion

Simile a styled-components, Emotion è una libreria di CSS-in-JS che consente di definire stili all'interno dei componenti React. Offre prestazioni ottimizzate e la possibilità di utilizzare oggetti JavaScript per definire gli stili, oltre ai template literals. Emotion supporta anche l'uso di temi per facilitare la coerenza dello stile attraverso l'applicazione.

1// Button.tsx
2/** @jsxImportSource @emotion/react */
3import { css } from '@emotion/react';
4import React from 'react';
5
6const buttonStyle = css`
7  background-color: purple;
8  color: white;
9  padding: 10px 20px;
10  border-radius: 5px;
11  border: none;
12  cursor: pointer;
13
14  &:hover {
15    background-color: darkpurple;
16  }
17`;
18
19const Button: React.FC = () => {
20  return <button css={buttonStyle}>Click Me</button>;
21};
22
23export default Button;

Inline Styles

React consente di applicare stili inline direttamente sugli elementi JSX utilizzando un oggetto JavaScript. Questo metodo è utile per stili dinamici che cambiano in base allo stato o alle props. Tuttavia, gli stili inline hanno alcune limitazioni, come l'incapacità di utilizzare pseudoselettori o animazioni CSS, e possono rendere il codice più difficile da leggere e mantenere per stili complessi.

1// Button.tsx
2import React from 'react';
3
4const Button: React.FC = () => {
5  const buttonStyle: React.CSSProperties = {
6    backgroundColor: 'orange',
7    color: 'white',
8    padding: '10px 20px',
9    borderRadius: '5px',
10    border: 'none',
11    cursor: 'pointer',
12  };
13
14  return <button style={buttonStyle}>Click Me</button>;
15};
16
17export default Button;

Considerazioni Finali

La scelta del metodo di stilizzazione dipende dalle esigenze specifiche del progetto, dalle preferenze del team e dalla dimensione dell'applicazione. Per progetti piccoli, il CSS tradizionale o i CSS Modules possono essere sufficienti. Per applicazioni più complesse, con requisiti di stili dinamici e tematizzazioni, styled-components o Emotion possono offrire una maggiore flessibilità e potenza. Considera le prestazioni, la manutenibilità e la coerenza dello stile quando scegli l'approccio da adottare.

Caricamento...

Diventiamo amici di penna? ✒️

Iscriviti alla newsletter per ricevere una mail ogni paio di settimane con le ultime novità, gli ultimi approfondimenti e gli ultimi corsi gratuiti puubblicati. Ogni tanto potrei scrivere qualcosa di commerciale, ma solo se mi autorizzi, altrimenti non ti disturberò oltre.

Se non ti piace la newsletter ti ricordo la community su Discord, dove puoi chiedere aiuto, fare domande e condividere le tue esperienze (ma soprattutto scambiare due meme con me). Ti aspetto!

Ho in previsione di mandarti una newsletter ogni due settimane e una commerciale quando capita.