La renderització condicional en React permet mostrar diferents continguts o components en funció de certes condicions. Això és molt útil per crear aplicacions dinàmiques i interactives. En aquesta secció, aprendrem com implementar la renderització condicional utilitzant diverses tècniques.
Conceptes clau
- Operador ternari: Una manera concisa d'expressar condicions.
- Operador lògic AND (
&&): Utilitzat per renderitzar un component només si una condició és certa. - Declaracions
if-else: Utilitzades per condicions més complexes. - Funcions de renderització: Funcions que retornen components en funció de condicions.
Operador ternari
L'operador ternari és una manera concisa d'expressar condicions en una sola línia. La seva sintaxi és:
Exemple
import React from 'react';
function UserGreeting(props) {
return <h1>Benvingut, {props.name}!</h1>;
}
function GuestGreeting() {
return <h1>Si us plau, registra't.</h1>;
}
function Greeting(props) {
const isLoggedIn = props.isLoggedIn;
return (
isLoggedIn ? <UserGreeting name="Joan" /> : <GuestGreeting />
);
}
export default Greeting;En aquest exemple, si isLoggedIn és true, es mostrarà el component UserGreeting. Si és false, es mostrarà el component GuestGreeting.
Operador lògic AND (&&)
L'operador lògic AND (&&) és útil per renderitzar un component només si una condició és certa.
Exemple
import React from 'react';
function WarningBanner(props) {
if (!props.warn) {
return null;
}
return (
<div className="warning">
Avís!
</div>
);
}
class Page extends React.Component {
constructor(props) {
super(props);
this.state = {showWarning: true};
this.handleToggleClick = this.handleToggleClick.bind(this);
}
handleToggleClick() {
this.setState(state => ({
showWarning: !state.showWarning
}));
}
render() {
return (
<div>
<WarningBanner warn={this.state.showWarning} />
<button onClick={this.handleToggleClick}>
{this.state.showWarning ? 'Amaga' : 'Mostra'}
</button>
</div>
);
}
}
export default Page;En aquest exemple, el component WarningBanner només es renderitza si props.warn és true.
Declaracions if-else
Per a condicions més complexes, podem utilitzar declaracions if-else dins del mètode render.
Exemple
import React from 'react';
class LoginControl extends React.Component {
constructor(props) {
super(props);
this.state = {isLoggedIn: false};
this.handleLoginClick = this.handleLoginClick.bind(this);
this.handleLogoutClick = this.handleLogoutClick.bind(this);
}
handleLoginClick() {
this.setState({isLoggedIn: true});
}
handleLogoutClick() {
this.setState({isLoggedIn: false});
}
render() {
const isLoggedIn = this.state.isLoggedIn;
let button;
if (isLoggedIn) {
button = <button onClick={this.handleLogoutClick}>Logout</button>;
} else {
button = <button onClick={this.handleLoginClick}>Login</button>;
}
return (
<div>
<Greeting isLoggedIn={isLoggedIn} />
{button}
</div>
);
}
}
export default LoginControl;En aquest exemple, es mostra un botó de "Login" o "Logout" en funció de l'estat isLoggedIn.
Funcions de renderització
Les funcions de renderització són funcions que retornen components en funció de condicions. Això pot ajudar a mantenir el codi més net i organitzat.
Exemple
import React from 'react';
function renderGreeting(isLoggedIn) {
if (isLoggedIn) {
return <UserGreeting name="Joan" />;
}
return <GuestGreeting />;
}
function Greeting(props) {
return (
<div>
{renderGreeting(props.isLoggedIn)}
</div>
);
}
export default Greeting;En aquest exemple, la funció renderGreeting decideix quin component renderitzar en funció de la condició isLoggedIn.
Exercicis pràctics
Exercici 1
Crea un component que mostri un missatge de benvinguda si l'usuari està autenticat i un missatge de registre si no ho està. Utilitza l'operador ternari per implementar la renderització condicional.
Solució
import React from 'react';
function WelcomeMessage(props) {
return (
<div>
{props.isAuthenticated ? <h1>Benvingut, {props.username}!</h1> : <h1>Si us plau, registra't.</h1>}
</div>
);
}
export default WelcomeMessage;Exercici 2
Crea un component que mostri un avís només si una condició és certa. Utilitza l'operador lògic AND (&&) per implementar la renderització condicional.
Solució
import React from 'react';
function AlertMessage(props) {
return (
<div>
{props.showAlert && <div className="alert">Això és un avís!</div>}
</div>
);
}
export default AlertMessage;Resum
En aquesta secció, hem après diverses tècniques per implementar la renderització condicional en React, incloent l'ús de l'operador ternari, l'operador lògic AND (&&), declaracions if-else i funcions de renderització. Aquestes tècniques ens permeten crear aplicacions més dinàmiques i interactives. A la següent secció, explorarem com treballar amb llistes i claus en React.
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
