Render Props
Qu'est-ce que les Render Props ?
Les Render Props sont une technique de partage de logique dans les composants (components, React) React. Un composant avec une props (React) de type fonction qui contrôle ce qu'il rend est appelé un composant avec "Render Props". Cela permet de réutiliser la logique de render (React) entre plusieurs composants.
Exemple concret en TypeScript
Imaginons que nous avons une logique de suivi de la position de la souris et que nous voulons la réutiliser dans plusieurs composants.
Étape 1 : Créer un composant avec Render Props
import React, { Component, ReactNode } from 'react';
interface MouseProps {
render: (state: MouseState) => ReactNode;
}
interface MouseState {
x: number;
y: number;
}
class Mouse extends Component<MouseProps, MouseState> {
constructor(props: MouseProps) {
super(props);
this.state = { x: 0, y: 0 };
this.handleMouseMove = this.handleMouseMove.bind(this);
}
handleMouseMove(event: React.MouseEvent) {
this.setState({
x: event.clientX,
y: event.clientY
});
}
render() {
return (
<div style={{ height: '100%' }} onMouseMove={this.handleMouseMove}>
{this.props.render(this.state)}
</div>
);
}
}
export default Mouse;
Étape 2 : Utiliser le composant avec Render Props
Voici comment tu peux utiliser le composant Mouse pour afficher la position de la souris :
import React from 'react';
import Mouse from './Mouse';
const MouseTracker: React.FC = () => {
return (
<div>
<h1>Déplace la souris autour !</h1>
<Mouse render={({ x, y }) => (
<p>La position de la souris est ({x}, {y})</p>
)} />
</div>
);
}
export default MouseTracker;
Explications
-
Composant
Mouse:- Ce composant garde trace de la position de la souris (
xety) dans son état local. - Il utilise une prop appelée
render, qui est une fonction. Cette fonction est appelée avec l'état actuel de la souris (c'est-à-dire la positionxety), et ce qui est retourné par cette fonction est rendu à l'intérieur dudiv.
- Ce composant garde trace de la position de la souris (
-
Composant
MouseTracker:- Ce composant utilise le composant
Mouseet lui passe une fonction via la proprender. - Cette fonction reçoit les coordonnées de la souris et retourne un élément JSX qui affiche ces coordonnées.
- Ce composant utilise le composant
Pourquoi utiliser les Render Props ?
Les Render Props permettent de rendre des composants plus flexibles et réutilisables. Au lieu de lier la logique de rendu directement dans un composant, tu peux la déléguer à une fonction, ce qui permet de réutiliser la même logique dans différents contextes sans dupliquer le code.
Voici une liste de notions avancées que tu peux explorer pour approfondir ta compréhension et tes compétences en React et TypeScript :
-
Connaissance/Higher-Order Components :
- Une technique avancée pour réutiliser la logique de composants. Les HOC sont des fonctions qui prennent un composant et retournent un nouveau composant.
-
- Permet de partager des valeurs globales (comme le thème, l'utilisateur authentifié, etc.) sans avoir à passer explicitement des props à travers tous les niveaux de l'arborescence des composants.
-
Hooks personnalisés :
- Les Hooks en React (comme
useState,useEffect) peuvent être combinés et encapsulés dans des fonctions réutilisables appelées "Hooks personnalisés" pour encapsuler des logiques de composants complexes.
- Les Hooks en React (comme
-
React-Suspense et React.lazy :
- Techniques pour le chargement paresseux (lazy loading) des composants et autres ressources, permettant d'améliorer les performances de l'application.
-
- Composants pour capturer les erreurs JavaScript n'importe où dans l'arborescence des composants enfants et afficher une interface de secours au lieu de planter le tout.
-
TypeScript Avancé :
- Types conditionnels
- types génériques
- Types utilitaires (Partial, Pick, Omit, etc.)
- interfaces (programmation) vs Types
-
Code Splitting :
- Diviser le code en petits morceaux (chunks) que l'on charge au besoin, ce qui améliore les temps de chargement de l'application.
-
React.memo et useMemo :
- Techniques pour optimiser les performances en évitant les rendus inutiles de composants.
-
Recoil / Zustand / Jotai (State Management Libraries) :
- Bibliothèques de gestion d'état modernes et légères comme alternatives à Redux, offrant des approches plus simples et performantes.
-
Testing avec Jest et react-testing-library :
- Tester les composants React avec des outils modernes qui permettent de s'assurer que les composants fonctionnent comme attendu.
-
Server-Side Rendering (SSR) avec Next.js :
- Rendre les pages React sur le serveur pour améliorer le SEO et les temps de chargement initiaux.
-
Static Site Generation (SSG) avec Next.js :
- Générer des pages statiques à la compilation pour améliorer les performances et offrir une meilleure expérience utilisateur.
Chacune de ces notions te permettra d'approfondir ta maîtrise de React et TypeScript, et de créer des applications plus robustes, performantes et maintenables. Bonne exploration !
