Blog ENI : Toute la veille numérique !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
💥 Du 22 au 24 novembre : Accès 100% GRATUIT
à la Bibliothèque Numérique ENI. Je m'inscris !
  1. Livres et vidéos
  2. React
  3. Maîtriser les design patterns React
Extrait - React Développez le Front End de vos applications web et mobiles avec JavaScript (nouvelle édition)
Extraits du livre
React Développez le Front End de vos applications web et mobiles avec JavaScript (nouvelle édition)
2 avis
Revenir à la page d'achat du livre

Maîtriser les design patterns React

Introduction

Les design patterns sont des solutions éprouvées aux problèmes récurrents de conception de logiciels. Dans le contexte de React, les design patterns fournissent des modèles de conception et des approches pour structurer vos composants, gérer le state, gérer les interactions utilisateur et bien plus encore. Dans les différents exemples du livre, nous avons pu en voir certains, parfois sans les nommer. Cette section sera l’occasion de mieux comprendre leur fonctionnement.

Ce que vous pouvez attendre de ce chapitre

Ce chapitre mettra l’accent sur l’utilisation des patterns ainsi que sur leurs avantages et leurs limitations. Il est important de noter qu’il n’existe pas de design pattern à suivre pour coder une application React. Il peut s’agir d’un abus de langage, mais on mentionne ici différentes techniques qui sont soit mentionnées dans la documentation comme de bonnes pratiques, soit qui ont été popularisées au sein de la communauté.

React et la communauté de développeurs font constamment évoluer l’écosystème. Cela va parfois tellement vite que certains patterns ne sont plus très utilisés, mais il reste important de les comprendre au cas où vous seriez amené à les rencontrer. Nous couvrirons entre autres :

  • les Higher-Order Components...

Higher-Order Components

Les Higher-Order Components (HOC) sont un design pattern en React qui permet de réutiliser une certaine logique. Les HOC ne sont pas destinés à être utilisés seuls, ce sont des fonctions qui prennent un composant en argument et renvoient un nouveau composant enrichi en fonctionnalités.

1. Fonctionnement des Higher-Order Components

Voici un exemple de structure de base d’un HOC :

function withFeature(WrappedComponent) { 
  return function EnhancedComponent(props) { 
    // Ajout d'une logique ou de propriétés ici 
    return <WrappedComponent {...props} />; 
  }; 
} 

Dans cet exemple, withFeature est un HOC qui enveloppe WrappedComponent et renvoie EnhancedComponent, un composant augmenté de nouvelles capacités.

Il existe une convention sur les HOC, en général ils débutent par le mot with, qui signifie « avec ». L’idée d’un HOC est de prendre un composant et de le retourner, avec quelque chose en plus.

2. Ce qu’offrent les Higher-Order Components

Les HOC possèdent deux grandes forces :

  • Ils permettent de partager des fonctionnalités communes entre plusieurs composants, réduisant ainsi la redondance du code.

  • Leur utilisation permet de diviser une application en composants indépendants, chacun...

Render props

Le design pattern Render Props est une technique qui consiste à passer une fonction en tant que prop à un composant, permettant ainsi au composant d’obtenir des données ou du comportement de cette fonction. Ce pattern favorise la réutilisabilité en permettant aux composants de partager la logique sans avoir à utiliser les Higher-Order Components.

1. Fonctionnement des render props

Le principe des render props est simple : un composant reçoit une fonction en tant que prop, généralement appelée render ou une autre fonction spécifique. Cette fonction est ensuite appelée dans le composant, permettant ainsi au composant parent de contrôler ce qui doit être rendu.

Voici un exemple basique de l’utilisation de render props :

function DataProvider({ render }) { 
  const [data, setData] = React.useState(null); 
 
  // Logique pour charger des données 
  const loadData = () => { 
    setData('Données chargées'); 
  }; 
 
  // Appel de loadData selon la logique métier... 
 
  return render(data); 
} 

Dans cet exemple, DataProvider est un composant fonctionnel qui utilise une render prop render. Le composant gère un état data et appelle render...

Provider

Le design pattern Provider est une approche permettant de gérer et de partager l’état entre différents composants sans avoir à passer manuellement les données via les props.

Cette technique permet de transmettre des données ou des fonctions à travers l’arbre des composants sans avoir à les passer explicitement à chaque niveau via les props. Ce modèle utilise le contexte de React pour fournir une valeur (données ou fonctions) à des composants plus bas dans l’arbre des composants.

1. Fonctionnement du Provider Pattern

Le Provider Pattern repose sur la notion de « fournisseur » de données. Un composant Provider est placé en haut de l’arbre des composants, généralement près de la racine de l’application. Ce composant fournit un contexte qui peut être consommé par les composants enfants sans avoir à les transmettre via les props.

const MyContext = React.createContext(defaultValue); 
 
function MyProvider({ children, value }) { 
  return <MyContext.Provider value={value}>{children}</MyContext.Provider>; 
} 

Dans cet exemple, MyProvider est un composant qui utilise MyContext.Provider pour passer value à ses enfants et à tous les descendants intéressés.

2. Avantages du Provider Pattern...

Composants container et de présentation

Les composants containers, également appelés « composants intelligents » ou smart components, se concentrent sur la façon dont les choses fonctionnent. Ils fournissent les données et le comportement aux composants de présentation ou à d’autres composants enfants.

Les composants de présentation, qu’on appelle aussi « composants idiots » ou dumb components, se concentrent sur l’aspect visuel de l’interface utilisateur. Ils reçoivent des données et des callbacks principalement via les props et les rendent de manière déclarative.

1. Composants container

Les composants container sont responsables de la logique et de la gestion de l’état. Ils sont souvent connectés à des sources de données externes, telles que des stores Redux ou des API. Ils prennent en charge les opérations de récupération de données, de manipulation et de mise à jour de l’état. Ils passent ensuite les données nécessaires aux composants de présentation via les props.

Voici un exemple :

function UserListContainer() { 
  const [users, setUsers] = useState([]); 
 
  React.useEffect(() => { 
    // Logique pour charger les données utilisateur ...

Hooks

Les hooks sont une innovation majeure introduite dans React pour permettre aux composants fonctionnels de gérer l’état local, les effets et d’autres fonctionnalités auparavant réservées aux composants de classe. Les hooks offrent une manière plus élégante et concise d’écrire du code React en évitant la complexité des hiérarchies de composants imbriqués et en favorisant la réutilisabilité de la logique.

1. Les bases du pattern Hooks

Le pattern Hooks en React se réfère à l’utilisation de fonctions spéciales, les hooks, pour réutiliser la logique d’état entre plusieurs composants dans une application. Cette approche est particulièrement utile pour ajouter de l’état à un composant fonctionnel, gérer la logique d’état entre plusieurs composants et gérer le cycle de vie d’un composant.

2. Hooks personnalisés

Au-delà des hooks intégrés, React permet de créer des hooks personnalisés. Ils peuvent encapsuler et partager des logiques d’état ou des comportements spécifiques, facilitant ainsi leur réutilisation dans plusieurs composants de l’application.

Voici un exemple :

function useHover() { 
  const [hovered, setHovered] = React.useState(false); ...