Le rendu conditionnel est une fonctionnalité puissante de React qui permet aux développeurs de rendre les composants en fonction de certaines conditions.
C’est un concept fondamental qui joue un rôle crucial dans la construction d’applications web dynamiques et interactives.
Dans ce guide complet, nous allons plonger en profondeur dans le rendu conditionnel dans React, en couvrant les techniques de base et avancées avec des exemples pour une bonne compréhension.
Comprendre le rendu conditionnel dans React
Le rendu conditionnel dans React permet aux développeurs de contrôler dynamiquement le contenu affiché à l’écran en fonction de valeurs spécifiques qui peuvent être stockées dans une variable, un état ou des props.
Cela peut être extrêmement utile dans les scénarios où vous souhaitez afficher ou masquer certains éléments de l’interface utilisateur, modifier la mise en page d’une page ou rendre un contenu différent en fonction des interactions de l’utilisateur.
Le rendu conditionnel est important dans les applications React car il vous permet de créer des interfaces utilisateur dynamiques et interactives qui peuvent répondre aux données changeantes et aux interactions de l’utilisateur en temps réel.
Il contribuera à améliorer les performances et l’efficacité de vos applications en évitant le rendu inutile de composants ou d’éléments qui ne sont pas nécessaires.
Techniques de base pour le rendu conditionnel
Il existe plusieurs techniques de base que vous pouvez utiliser pour le rendu conditionnel dans React. Explorons chacune d’entre elles en détail.
Utilisation de l’instruction if pour le rendu conditionnel
L’une des façons les plus simples d’implémenter le rendu conditionnel dans React est d’utiliser l’instruction traditionnelle if
.
if (condition) {
return <p>Expression 1</p>;
} else {
return <p>Expression 2</p>;
}
L’instruction JavaScript if
peut être utilisée dans la méthode render()
de votre composant pour effectuer un rendu conditionnel du contenu en fonction d’une certaine condition.
Par exemple, vous pouvez utiliser l’instruction if pour afficher un spinner de chargement en attendant que les données se chargent :
import { useState, useEffect } from 'react';
import Spinner from './Spinner';
const MyComponent = () => {
const [isLoading, setIsLoading] = useState(true);
const [data, setData] = useState(null);
useEffect(() => {
// Fetch data from an API
fetch('https://example.com/data')
.then((response) => response.json())
.then((data) => {
setData(data);
setIsLoading(false);
});
}, []);
if (isLoading) {
return <Spinner />;
}
return <div>{/* Render the data here */}</div>;
};
export default MyComponent;
Dans cet exemple, MyComponent
récupère des données d’une API à l’aide du hook useEffect
. En attendant le chargement des données, nous affichons un composant Spinner à l’aide de l’instruction if
.
Un autre exemple peut être le rendu d’une interface utilisateur de secours lorsqu’une erreur se produit lors du rendu de votre composant :
const MyComponent = ({ data }) => {
if (!data) {
return <p>Something went wrong. Please try again later.</p>;
}
return <div>{/* Render the data here */}</div>;
};
export default MyComponent;
Dans ce code, nous avons un MyComponent
qui prend une propriété data
. Si la propriété data
est erronée, nous affichons un message d’erreur à l’aide de la déclaration if
.
Enfin, vous pouvez afficher un contenu différent selon le rôle de l’utilisateur à l’aide de l’instruction if
:
const MyComponent = ({ user }) => {
if (user.role === 'admin') {
return <p>Welcome, admin!</p>;
} else if (user.role === 'user') {
return <p>Welcome, user!</p>;
} else {
return <p>You are not authorized to access this page.</p>;
}
};
export default MyComponent;
Dans ce code, nous avons un MyComponent
qui prend une propriété user
. En fonction de la propriété user.role
, nous affichons un contenu différent à l’aide de l’instruction if
.
Utilisation de l’opérateur ternaire pour le rendu conditionnel
Une autre façon concise d’implémenter le rendu conditionnel dans React est d’utiliser l’opérateur ternaire (?) dans JSX.
L’opérateur ternaire vous permet d’écrire une instruction if-else compacte en ligne en spécifiant 3 opérandes. Le premier opérande est la condition, tandis que les deux autres opérandes sont les expressions. Si la condition est true
, la première expression sera exécutée ; sinon, la deuxième expression sera exécutée.
Par exemple, vous pouvez rendre différents composants en fonction d’une propriété :
import ComponentA from './ComponentA';
import ComponentB from './ComponentB';
const ExampleComponent = ({ shouldRenderComponentA }) => {
return (
<div>
{shouldRenderComponentA ? <ComponentA /> : <ComponentB />}
</div>
);
};
export default ExampleComponent;
Dans ce code, nous avons un ExampleComponent
qui prend une propriété appelée shouldRenderComponentA
. Nous utilisons l’opérateur ternaire pour rendre conditionnellement ComponentA
ou ComponentB
en fonction de la valeur de la propriété.
Vous pouvez également rendre un texte différent en fonction d’un état :
import { useState } from 'react';
const ExampleComponent = () => {
const [showMessage, setShowMessage] = useState(false);
return (
<div>
<button onClick={() => setShowMessage(!showMessage)}>
{showMessage ? 'Hide message' : 'Show message'}
</button>
{showMessage ? <p>Hello, world!</p> : null}
</div>
);
};
export default ExampleComponent;
Dans cet exemple, nous utilisons l’opérateur ternaire pour rendre un texte différent en fonction de la valeur de l’état showMessage
. Lorsque vous cliquez sur le bouton, la valeur de showMessage
est modifiée et le texte est affiché ou masqué en conséquence.
Enfin, vous pouvez afficher une barre de chargement pendant que les données sont récupérées :
import { useState, useEffect } from 'react';
import Spinner from './Spinner';
const ExampleComponent = () => {
const [isLoading, setIsLoading] = useState(true);
const [data, setData] = useState(null);
useEffect(() => {
const fetchData = async () => {
const response = await fetch('https://jsonplaceholder.typicode.com/todos/1');
const jsonData = await response.json();
setData(jsonData);
setIsLoading(false);
};
fetchData();
}, []);
return (
<div>
{isLoading ? <Spinner /> : <p>{data.title}</p>}
</div>
);
};
export default ExampleComponent;
Dans cet exemple, nous utilisons l’opérateur ternaire pour rendre conditionnellement une barre de chargement pendant que des données sont extraites d’une API. Une fois les données disponibles, nous rendons la propriété title
à l’aide de l’opérateur ternaire.
Utilisation des opérateurs logiques AND et OR pour le rendu conditionnel
Vous pouvez également utiliser les opérateurs logiques AND (&&
) et OR (||
) pour mettre en œuvre le rendu conditionnel dans React.
L’opérateur logique AND vous permet d’effectuer le rendu d’un composant uniquement si une certaine condition est vraie, tandis que l’opérateur logique OR vous permet d’effectuer le rendu d’un composant si l’une ou l’autre des conditions est vraie.
Ces opérateurs sont utiles lorsque vous avez des conditions simples qui déterminent si un composant doit être rendu ou non. Par exemple, si vous souhaitez rendre un bouton uniquement si un formulaire est valide, vous pouvez utiliser l’opérateur logique AND comme suit :
import { useState } from 'react';
const FormComponent = () => {
const [formValues, setFormValues] = useState({ username: "", password: "" });
const isFormValid = formValues.username && formValues.password;
const handleSubmit = (event) => {
event.preventDefault();
// Submit form data
};
return (
<form onSubmit={handleSubmit}>
<input
type="text"
value={formValues.username}
placeholder="Type Username..."
onChange={(e) =>
setFormValues({ ...formValues, username: e.target.value })
}
/>
<br />
<input
type="password"
value={formValues.password}
placeholder="Type Password..."
onChange={(e) =>
setFormValues({ ...formValues, password: e.target.value })
}
/>
{isFormValid && <button type="submit">Submit</button>}
</form>
);
};
export default FormComponent;
Dans cet exemple, nous avons un site FormComponent
qui contient un formulaire avec deux champs de saisie pour username
et password
. Nous utilisons le crochet useState
pour gérer les valeurs du formulaire et la variable isFormValid
pour vérifier si les deux champs de saisie ont des valeurs. En utilisant l’opérateur logique ET (&&), nous ne rendons le bouton de soumission que si isFormValid
est vrai. Cela garantit que le bouton n’est activé que lorsque le formulaire est valide.
De même, vous pouvez utiliser l’opérateur OR pour afficher un message de chargement si les données sont toujours en cours de chargement ou un message d’erreur si une erreur se produit :
import React, { useEffect, useState } from 'react';
const DataComponent = () => {
const [data, setData] = useState(null);
const [isLoading, setIsLoading] = useState(true);
const [errorMessage, setErrorMessage] = useState('');
useEffect(() => {
const fetchData = async () => {
try {
const response = await fetch('https://api.example.com/data');
const data = await response.json();
setData(data);
} catch (error) {
setErrorMessage('An error occurred while fetching data.');
} finally {
setIsLoading(false);
}
};
fetchData();
}, []);
return (
<>
{errorMessage || isLoading ? (
<p>{errorMessage || 'Loading...'}</p>
) : (
<ul>
{data.map((item) => (
<li key={item.id}>{item.name}</li>
))}
</ul>
)}
</>
);
};
export default DataComponent;
Dans cet exemple, un site DataComponent
récupère des données d’une API à l’aide de fetch et les affiche dans une liste. Nous utilisons le crochet useState
pour gérer les données, l’état de chargement et le message d’erreur. En utilisant l’opérateur logique OR (||), nous pouvons afficher un message de chargement ou un message d’erreur si l’une ou l’autre de ses conditions est vraie. Cela garantit que l’utilisateur voit un message indiquant l’état actuel du processus de récupération des données.
L’utilisation des opérateurs logiques AND et OR pour le rendu conditionnel dans React est une manière concise et lisible de traiter des conditions simples. Cependant, il est préférable d’utiliser d’autres approches comme les déclarations switch
pour une logique plus complexe.
Techniques avancées pour le rendu conditionnel
Le rendu conditionnel dans React peut être plus complexe en fonction des exigences de votre application. Voici quelques techniques avancées que vous pouvez utiliser pour le rendu conditionnel dans des scénarios plus complexes.
Utilisation des instructions Switch pour le rendu conditionnel
Bien que les instructions if et les opérateurs ternaires soient des approches courantes pour le rendu conditionnel, il arrive qu’une instruction switch
soit plus appropriée, en particulier lorsqu’il s’agit de conditions multiples.
Voici un exemple :
import React from 'react';
const MyComponent = ({ userType }) => {
switch (userType) {
case 'admin':
return <p>Welcome, admin user!</p>;
case 'user':
return <p>Welcome, regular user!</p>;
default:
return <p>Please log in to continue.</p>;
}
};
export default MyComponent;
Dans ce code, une instruction switch
est utilisée pour effectuer un rendu conditionnel du contenu en fonction de l’instruction userType
. Cette approche peut s’avérer utile lorsqu’il s’agit de conditions multiples et offre une manière plus organisée et plus lisible de gérer une logique complexe.
Rendu conditionnel avec React Router
React Router est une bibliothèque populaire pour gérer le routage côté client dans les applications React. React Router vous permet d’effectuer un rendu conditionnel des composants en fonction de l’itinéraire actuel.
Voici un exemple de mise en œuvre du rendu conditionnel à l’aide de React Router :
import { useState } from 'react';
import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';
import Home from './components/Home';
import Login from './components/Login';
import Dashboard from './components/Dashboard';
import NotFound from './components/NotFound';
const App = () => {
const [isLoggedIn, setIsLoggedIn] = useState(false);
return (
<Router>
<Switch>
<Route exact path="/" component={Home} />
<Route path="/login">
<Login setIsLoggedIn={setIsLoggedIn} />
</Route>
{isLoggedIn ? (
<Route path="/dashboard" component={Dashboard} />
) : (
<Route component={NotFound} />
)}
</Switch>
</Router>
);
};
export default App;
Dans ce code, nous utilisons l’état isLoggedIn
pour rendre conditionnellement soit le composant Dashboard
si l’utilisateur est connecté, soit le composant NotFound
si l’utilisateur n’est pas connecté. Le composant Login
définit l’état isLoggedIn
sur true
une fois que l’utilisateur s’est connecté avec succès.
Notez que nous utilisons la propriété des enfants du composant <Route>
pour transmettre le composant Login
et la fonction setIsLoggedIn
. Cela nous permet de transmettre des éléments au composant Login
sans les spécifier dans la propriété path
.
Résumé
Le rendu conditionnel est une technique puissante de React qui vous permet de mettre à jour dynamiquement l’interface utilisateur en fonction de différentes conditions.
En fonction de la complexité de la logique de l’interface utilisateur de votre application, vous pouvez choisir l’approche qui répond le mieux à vos besoins.
N’oubliez pas de garder votre code propre, organisé et lisible, et de toujours tester minutieusement votre logique de rendu conditionnel pour vous assurer qu’elle fonctionne comme prévu dans différents scénarios.
Vous cherchez la solution d’hébergement idéale pour vos applications React ? Essayez gratuitement l’hébergement d’applications de Kinsta!
Laisser un commentaire