BTS SIO2D
  • Accueil
  • Connexion
25 janvier 2025 par Nathan DZIADEK

Article Janvier

Article Janvier
25 janvier 2025 par Nathan DZIADEK

Table des matières

Toggle
  • Article 1
  • Render Props
  • 1. Qu’est-ce qu’une Render Prop ?
    • Exemple simple
  • 2. Comment fonctionnent les Render Props ?
    • Composant avec gestion de la logique
    • Explication
  • 3. Avantages des Render Props
    • 3.1. Réutilisabilité
    • 3.2. Séparation de la logique et de la présentation
    • 3.3. Comportement dynamique
    • 3.4. Composition facile
  • 4. Inconvénients des Render Props
    • 4.1. Composants imbriqués
    • 4.2. Performance
  • 5. Exemple avancé : Animation avec Render Props
    • Explication
  • 6. Conclusion
  • Article 2
  • Higher Order Components (HOC)
  • 1. Qu’est-ce qu’un Higher Order Component (HOC) ?
    • Syntaxe d’un HOC
  • 2. Exemple de HOC simple
    • Création du HOC
    • Composant de base
    • Utilisation du HOC
    • Le composant final
  • 3. Pourquoi utiliser les HOC ?
    • 3.1. Réutilisabilité
    • 3.2. Modulaire
    • 3.3. Séparation des préoccupations
    • 3.4. Encapsulation de comportements transversaux
  • 4. Exemple avancé : HOC pour la gestion de l’authentification
    • HOC de vérification d’authentification
    • Composant protégé
    • Utilisation dans l’application
    • Explication
  • 5. Bonnes pratiques avec les HOC
    • 5.1. Ne pas modifier le comportement d’un composant directement
    • 5.2. Nommer les HOC de manière explicite
    • 5.3. Ne pas trop imbriquer les HOC
  • 6. Limites des HOC
    • 6.1. Complexité croissante
    • 6.2. Problèmes de prop drilling
  • 7. Conclusion

Article 1

Render Props

Dans le développement d’applications React, il est essentiel de gérer la réutilisation de la logique de manière efficace. Une des techniques puissantes pour cela est l’utilisation des Render Props. Ce concept permet de partager des comportements ou des fonctionnalités entre différents composants de manière flexible et propre. Cet article va explorer en profondeur ce que sont les Render Props, comment les utiliser, et quels avantages elles offrent dans le contexte de ReactJS.

1. Qu’est-ce qu’une Render Prop ?

Une Render Prop est une technique dans React où un composant prend une fonction en prop et l’utilise pour rendre un ou plusieurs éléments. Ce pattern permet de partager des comportements ou des logiques d’interaction entre plusieurs composants sans les lier de manière rigide. Au lieu de définir un rendu statique dans un composant, on peut passer une fonction à un composant qui la rendra à son tour.

Exemple simple

Prenons un exemple de composant qui utilise une Render Prop pour afficher un message avec des données dynamiques :

import React, { useState } from ‘react’;

// Composant avec Render Prop
const Message = ({ render }) => {
return <div>{render()}</div>;
};

// Composant parent
const App = () => {
const [name, setName] = useState(‘John’);

return (
<Message render={() => <h1>Bonjour, {name}!</h1>} />
);
};

export default App;

Dans cet exemple, le composant Message prend une prop render qui est une fonction. Le composant parent (App) passe une fonction qui génère le message à afficher. C’est ici que le principe de la Render Prop prend tout son sens : le composant Message se contente d’exécuter cette fonction pour afficher le contenu, sans avoir de logique spécifique à l’affichage.

2. Comment fonctionnent les Render Props ?

Une Render Prop permet de séparer la logique de la présentation. Elle offre un moyen de partager des comportements entre plusieurs composants tout en laissant le composant parent décider de ce qui sera effectivement rendu.

Composant avec gestion de la logique

Prenons l’exemple d’un composant qui gère un état, comme un compteur, et qui le passe à son enfant via une Render Prop :

import React, { useState } from ‘react’;

// Composant qui gère la logique
const Counter = ({ render }) => {
const [count, setCount] = useState(0);
const increment = () => setCount(count + 1);

return (
<div>
{render(count, increment)}
</div>
);
};

// Composant parent qui utilise la Render Prop
const App = () => {
return (
<Counter render={(count, increment) => (
<div>
<h1>Compteur: {count}</h1>
<button onClick={increment}>Incrémenter</button>
</div>
)} />
);
};

export default App;

Explication

  • Composant Counter : Ce composant gère l’état du compteur (count) et fournit une fonction increment pour le mettre à jour.
  • Render Prop : Le composant Counter utilise une prop render qui est une fonction. Cette fonction reçoit l’état actuel (count) et la fonction increment, puis elle peut rendre un élément en utilisant ces informations.
  • Composant App : Le composant parent passe la fonction à Counter, qui utilise ces données pour afficher un bouton permettant d’incrémenter le compteur.

Ce mécanisme de Render Props permet de centraliser la logique de gestion d’état (ici, le compteur) tout en permettant au parent de décider de l’interface utilisateur. Ce modèle améliore la réutilisabilité et la séparation des préoccupations.

3. Avantages des Render Props

Les Render Props offrent plusieurs avantages qui en font une technique populaire dans le développement avec ReactJS.

3.1. Réutilisabilité

Les Render Props permettent de créer des composants réutilisables qui peuvent être partagés entre différentes parties de l’application, tout en étant flexibles. Par exemple, un composant qui gère un état comme un compteur peut être réutilisé dans différentes situations, simplement en passant des Render Props adaptées à chaque cas.

3.2. Séparation de la logique et de la présentation

L’un des avantages majeurs des Render Props est qu’elles permettent de séparer la logique métier (comme la gestion de l’état ou des événements) de la présentation. Cela donne aux développeurs plus de liberté pour créer des interfaces modulaires et réutilisables.

3.3. Comportement dynamique

Les Render Props permettent de rendre des composants dynamiques, car la fonction passée peut être définie en fonction de l’état, des props ou des événements. Cela rend les composants plus flexibles et capables de répondre à des changements en temps réel.

3.4. Composition facile

Les Render Props sont également très efficaces pour la composition de composants. Vous pouvez imbriquer plusieurs Render Props pour gérer des comportements complexes de manière très modulaire.

4. Inconvénients des Render Props

Bien que puissantes, les Render Props ne sont pas sans inconvénients. Il est important de les utiliser judicieusement.

4.1. Composants imbriqués

L’un des inconvénients majeurs des Render Props est que l’on peut rapidement se retrouver avec des chaînes de composants imbriqués. Cela peut rendre le code plus difficile à lire et à maintenir, surtout lorsqu’il y a plusieurs niveaux d’imbrication.

4.2. Performance

Lorsque plusieurs Render Props sont utilisées, React doit réévaluer chaque prop de chaque composant à chaque changement d’état, ce qui peut potentiellement nuire aux performances si mal utilisé. Il est important de bien optimiser les rendus pour éviter les re-rendus inutiles.

5. Exemple avancé : Animation avec Render Props

Imaginons un cas d’usage où nous souhaitons créer une animation avec une Render Prop. Le composant Animate gère la logique de l’animation, et l’enfant peut définir comment rendre l’élément animé.

import React, { useState, useEffect } from ‘react’;

// Composant qui gère l’animation
const Animate = ({ render }) => {
const [position, setPosition] = useState(0);

useEffect(() => {
const interval = setInterval(() => {
setPosition((prev) => (prev + 5) % 100);
}, 100);

return () => clearInterval(interval);
}, []);

return render(position);
};

// Composant parent
const App = () => {
return (
<Animate render={(position) => (
<div style={{ transform: `translateX(${position}%)`, transition: ‘transform 0.1s linear’ }}>
Je me déplace !
</div>
)} />
);
};

export default App;

Explication

  • Composant Animate : Ce composant gère la position de l’élément animé avec un useState et un useEffect pour mettre à jour la position toutes les 100 ms.
  • Render Prop : La fonction passée à la prop render reçoit la position actuelle de l’élément et rend un élément qui utilise cette position pour animer l’élément via transform: translateX().

Cet exemple montre la puissance des Render Props pour gérer des comportements complexes comme les animations tout en gardant la logique séparée de l’interface utilisateur.

6. Conclusion

Les Render Props sont un concept puissant dans React qui permet de partager la logique de manière flexible et réutilisable. Elles permettent de séparer la logique de la présentation, de gérer dynamiquement le rendu, et de créer des composants modulaires. Cependant, comme pour toute technique, il est important de les utiliser avec soin pour éviter les problèmes de performance et de lisibilité du code.

En utilisant les Render Props, vous pouvez améliorer la réutilisabilité et la modularité de vos composants React, en particulier dans des cas où la gestion de la logique ou de l’état est complexe.

Article 2

Higher Order Components (HOC)

Les Higher Order Components (HOC) sont un concept fondamental dans l’écosystème React, utilisé pour partager des fonctionnalités entre plusieurs composants de manière efficace. Ce modèle permet de créer des composants réutilisables et d’augmenter la modularité de votre application. Dans cet article, nous allons explorer ce que sont les HOC, comment les utiliser, et pourquoi ils sont importants dans le développement d’applications React.

1. Qu’est-ce qu’un Higher Order Component (HOC) ?

Un Higher Order Component (HOC) est une fonction qui prend un composant en entrée et retourne un nouveau composant avec des fonctionnalités supplémentaires. Le HOC n’affecte pas le composant d’origine mais l’enrichit avec des props supplémentaires ou de la logique.

L’idée derrière les HOC est de créer des composants qui partagent des fonctionnalités communes (comme la gestion de l’état, la gestion des événements, ou l’accès aux données) et qui peuvent être facilement réutilisés dans différentes parties de l’application.

Syntaxe d’un HOC

Voici la syntaxe générale d’un HOC en React :

const withFeature = (WrappedComponent) => { return (props) => { // Ajoutez des fonctionnalités supplémentaires ici return <WrappedComponent {…props} />; }; };

Le HOC prend un composant WrappedComponent en argument et retourne un nouveau composant qui peut ajouter des comportements ou des props supplémentaires à WrappedComponent.

2. Exemple de HOC simple

Prenons un exemple simple où un HOC ajoute une fonctionnalité de compteur à un composant existant.

Création du HOC

import React, { useState } from ‘react’;

// HOC qui ajoute un compteur
const withCounter = (WrappedComponent) => {
return (props) => {
const [count, setCount] = useState(0);
const increment = () => setCount(count + 1);

return <WrappedComponent {…props} count={count} increment={increment} />;
};
};

export default withCounter;

Composant de base

Voici un composant simple qui affiche un message et un bouton pour incrémenter un compteur :

import React from ‘react’;
import withCounter from ‘./withCounter’;

const DisplayCounter = ({ count, increment }) => (
<div>
<h1>Le compteur est à : {count}</h1>
<button onClick={increment}>Incrémenter</button>
</div>
);

export default withCounter(DisplayCounter);

Utilisation du HOC

Dans l’exemple ci-dessus, le composant DisplayCounter est « emballé » avec le HOC withCounter, qui lui fournit un état count et une fonction increment. Ce HOC peut être appliqué à n’importe quel composant pour lui ajouter la fonctionnalité de compteur.

Le composant final

Le composant final avec le compteur fonctionne ainsi :

import React from ‘react’;
import DisplayCounter from ‘./DisplayCounter’;

const App = () => {
return <DisplayCounter />;
};

export default App;

Quand vous exécutez l’application, le composant DisplayCounter affiche un compteur et un bouton pour l’incrémenter, mais la logique de gestion du compteur est complètement séparée et encapsulée dans le HOC withCounter.

3. Pourquoi utiliser les HOC ?

3.1. Réutilisabilité

Les HOC permettent de réutiliser de la logique entre plusieurs composants sans dupliquer le code. Par exemple, au lieu de répéter la logique de gestion d’un compteur dans plusieurs composants, vous pouvez encapsuler cette logique dans un HOC réutilisable.

3.2. Modulaire

Les HOC permettent de structurer une application de manière modulaire, car ils ajoutent des fonctionnalités spécifiques de manière isolée sans modifier directement le composant d’origine.

3.3. Séparation des préoccupations

Avec les HOC, vous pouvez séparer la logique métier (comme l’accès aux API, la gestion de l’état, ou la gestion des événements) de la présentation du composant. Cela améliore la lisibilité et la maintenance du code.

3.4. Encapsulation de comportements transversaux

Les HOC sont particulièrement utiles pour encapsuler des comportements transversaux (comme la gestion de l’authentification, le suivi des erreurs ou la gestion de la logique de chargement) qui doivent être partagés entre plusieurs composants.

4. Exemple avancé : HOC pour la gestion de l’authentification

Supposons que nous ayons un composant qui nécessite une authentification avant d’afficher son contenu. Un HOC peut être utilisé pour vérifier si un utilisateur est authentifié et gérer l’affichage en fonction de cet état.

HOC de vérification d’authentification

import React from ‘react’;
import { Navigate } from ‘react-router-dom’;

// HOC pour protéger un composant avec une authentification
const withAuth = (WrappedComponent) => {
return (props) => {
const isAuthenticated = false; // On pourrait remplacer cela par un vrai check d’authentification

if (!isAuthenticated) {
return <Navigate to= »/login » />;
}

return <WrappedComponent {…props} />;
};
};

export default withAuth;

Composant protégé

import React from ‘react’;
import withAuth from ‘./withAuth’;

const ProtectedComponent = () => (
<div>
<h1>Bienvenue sur la page protégée!</h1>
</div>
);

export default withAuth(ProtectedComponent);

 

Utilisation dans l’application

import React from ‘react’; import ProtectedComponent from ‘./ProtectedComponent’; const App = () => { return ( <div> <ProtectedComponent /> </div> ); }; export default App;

Explication

Dans cet exemple, le HOC withAuth vérifie si l’utilisateur est authentifié avant de permettre l’affichage du ProtectedComponent. Si l’utilisateur n’est pas authentifié, il est redirigé vers une page de connexion. Cela permet de protéger l’accès à certaines parties de l’application de manière centralisée et réutilisable.

5. Bonnes pratiques avec les HOC

5.1. Ne pas modifier le comportement d’un composant directement

Les HOC doivent être utilisés pour ajouter de nouvelles fonctionnalités ou modifier le comportement d’un composant sans modifier directement son code. Cela permet de préserver la modularité et la réutilisabilité.

5.2. Nommer les HOC de manière explicite

Il est important de donner aux HOC des noms explicites qui indiquent clairement les fonctionnalités qu’ils ajoutent. Par exemple, withAuth pour un HOC qui ajoute une logique d’authentification ou withLoading pour un HOC qui gère l’état de chargement.

5.3. Ne pas trop imbriquer les HOC

L’un des risques liés aux HOC est qu’une imbrication excessive peut rendre le code difficile à lire et à maintenir. Essayez de limiter le nombre de HOC imbriqués et de trouver des moyens de les combiner de manière claire et lisible.

6. Limites des HOC

6.1. Complexité croissante

Bien que les HOC apportent une grande flexibilité, leur utilisation excessive peut rendre le code difficile à suivre. En particulier, lorsque plusieurs HOC sont imbriqués, il peut devenir compliqué de suivre le flux de données et de logique.

6.2. Problèmes de prop drilling

L’utilisation de HOC peut entraîner des problèmes de prop drilling, où des données doivent être passées par plusieurs niveaux de composants, ce qui peut rendre le code moins maintenable. Cependant, des solutions comme Context API ou State management libraries (Redux, MobX, etc.) peuvent aider à atténuer ce problème.

7. Conclusion

Les Higher Order Components (HOC) sont un puissant mécanisme de réutilisation de la logique dans React. Ils permettent de découpler la gestion des fonctionnalités transversales (comme l’authentification, la gestion de l’état, ou la manipulation des props) de la présentation des composants, rendant ainsi l’application plus modulaire, lisible et maintenable. Cependant, comme pour toute technologie, il est important de les utiliser avec parcimonie pour éviter la complexité excessive.

En suivant les bonnes pratiques et en restant conscient de leurs limites, les HOC peuvent être un atout précieux dans la gestion des fonctionnalités partagées au sein de vos applications React.

Article précédentShare Ivann PénaArticle suivant Article 10 React

Laisser un commentaire Annuler la réponse

Vous devez vous connecter pour publier un commentaire.

About The Blog

Nulla laoreet vestibulum turpis non finibus. Proin interdum a tortor sit amet mollis. Maecenas sollicitudin accumsan enim, ut aliquet risus.

Articles récents

projet flutter Forum28 avril 2025
Backup BDD Bash17 mars 2025
UE – TF1 se met à Unreal Engine ?17 mars 2025

Catégories

  • Article Angular Killian
  • Article Clément
  • Article Unreal Engine Hugo
  • Cybersécurité
  • IA
  • Non classé
  • Projet Flutter KHM
  • Projet Hugo
  • Stage Clément
  • Stage Hugo
  • Stage Killian P
  • TP Clément

Méta

  • Inscription
  • Connexion
  • Flux des publications
  • Flux des commentaires
  • Site de WordPress-FR

Étiquettes

Article Développer son projet professionnel Flutter Gérer son identité professionnelle Java Stage Symfony TP

Why Lander

Lander is a design prepared
especially for the free version
of Rife WordPress Theme.

You can use this for free.
Make your website today.
Get Started Now!

Contact

734 Blackwell Street
Anchorage, Alaska
info@domain.com
+33 (0) 101 0000
+33 (0) 102 0000
Mon. - Fri. 8AM - 6PM

Articles récents

projet flutter Forum28 avril 2025
Backup BDD Bash17 mars 2025
UE – TF1 se met à Unreal Engine ?17 mars 2025
Rife Wordpress Theme. Proudly Built By Apollo13