En aquest tema, explorarem dos conceptes fonamentals en la construcció de components en React: la composició i l'herència. Aquests conceptes són crucials per crear components reutilitzables i mantenibles.
Què és la composició?
La composició és una tècnica per construir components complexos a partir de components més simples. En lloc d'heretar funcionalitats d'un component pare, un component pot incloure altres components com a fills. Això permet una major flexibilitat i reutilització del codi.
Exemple de composició
function FancyBorder(props) { return ( <div className={'FancyBorder FancyBorder-' + props.color}> {props.children} </div> ); } function WelcomeDialog() { return ( <FancyBorder color="blue"> <h1 className="Dialog-title"> Benvingut </h1> <p className="Dialog-message"> Gràcies per visitar el nostre lloc web! </p> </FancyBorder> ); }
En aquest exemple, FancyBorder
és un component que utilitza la composició per incloure altres components dins seu mitjançant props.children
.
Avantatges de la composició
- Reutilització del codi: Permet reutilitzar components en diferents parts de l'aplicació.
- Flexibilitat: Els components poden ser combinats de diverses maneres.
- Mantenibilitat: Facilita la separació de responsabilitats i fa que el codi sigui més fàcil de mantenir.
Què és l'herència?
L'herència és un concepte de la programació orientada a objectes on una classe (component) pot heretar propietats i mètodes d'una altra classe (component). Tot i que l'herència és útil en molts llenguatges de programació, en React es recomana utilitzar la composició en lloc de l'herència.
Exemple d'herència (no recomanat en React)
class FancyBorder extends React.Component { render() { return ( <div className={'FancyBorder FancyBorder-' + this.props.color}> {this.props.children} </div> ); } } class WelcomeDialog extends FancyBorder { render() { return ( <div> <h1 className="Dialog-title"> Benvingut </h1> <p className="Dialog-message"> Gràcies per visitar el nostre lloc web! </p> </div> ); } }
En aquest exemple, WelcomeDialog
hereta de FancyBorder
. Tot i que això és possible, no és la manera recomanada de construir components en React.
Desavantatges de l'herència en React
- Rigidesa: L'herència pot fer que el codi sigui més rígid i menys flexible.
- Complexitat: Pot augmentar la complexitat del codi, fent-lo més difícil de mantenir.
- Reutilització limitada: L'herència limita la reutilització del codi en comparació amb la composició.
Comparació entre composició i herència
Aspecte | Composició | Herència |
---|---|---|
Reutilització del codi | Alta | Limitada |
Flexibilitat | Alta | Baixa |
Mantenibilitat | Alta | Baixa |
Complexitat | Baixa | Alta |
Separació de responsabilitats | Alta | Baixa |
Exercici pràctic
Exercici
Crea un component Card
que utilitzi la composició per incloure un títol i un contingut. Després, crea un component ProfileCard
que utilitzi Card
per mostrar informació d'un perfil d'usuari.
Solució
function Card(props) { return ( <div className="Card"> <div className="Card-title">{props.title}</div> <div className="Card-content">{props.children}</div> </div> ); } function ProfileCard() { return ( <Card title="Perfil d'Usuari"> <p>Nom: Joan</p> <p>Ocupació: Desenvolupador</p> </Card> ); }
Conclusió
La composició és una tècnica poderosa i flexible per construir components en React. Tot i que l'herència és un concepte important en la programació orientada a objectes, en React es recomana utilitzar la composició per crear components reutilitzables i mantenibles. Hem vist com utilitzar la composició amb exemples pràctics i hem comparat els avantatges i desavantatges de la composició i l'herència.
Curs de React
Mòdul 1: Introducció a React
- Què és React?
- Configuració de l'entorn de desenvolupament
- Hola Món en React
- JSX: Extensió de la sintaxi de JavaScript
Mòdul 2: Components de React
- Comprendre els components
- Components funcionals vs components de classe
- Props: Passar dades als components
- State: Gestionar l'estat del component
Mòdul 3: Treballar amb esdeveniments
- Gestionar esdeveniments en React
- Renderització condicional
- Llistes i claus
- Formularis i components controlats
Mòdul 4: Conceptes avançats de components
- Elevar l'estat
- Composició vs herència
- Mètodes del cicle de vida de React
- Hooks: Introducció i ús bàsic
Mòdul 5: Hooks de React
Mòdul 6: Enrutament en React
Mòdul 7: Gestió de l'estat
- Introducció a la gestió de l'estat
- API de context
- Redux: Introducció i configuració
- Redux: Accions i reductors
- Redux: Connexió amb React
Mòdul 8: Optimització del rendiment
- Tècniques d'optimització del rendiment de React
- Memorització amb React.memo
- Hooks useMemo i useCallback
- Divisió de codi i càrrega mandrosa
Mòdul 9: Proves en React
- Introducció a les proves
- Proves unitàries amb Jest
- Proves de components amb React Testing Library
- Proves de punta a punta amb Cypress
Mòdul 10: Temes avançats
- Renderització del costat del servidor (SSR) amb Next.js
- Generació de llocs estàtics (SSG) amb Next.js
- TypeScript amb React
- React Native: Construir aplicacions mòbils