DEV Community

José Wheelock
José Wheelock

Posted on

React Design Pattern: Compound Components

Ce design pattern est assez simple à mettre en place: on a un component parent qui a des components enfants et ils sont reliés par un context.

Ce qu'on voit généralement en production, c'est un component parent avec des enfants à qui on passe des props.
Ici, l'approche est différente, c'est un component qui est découpé en plusieurs options:


<PreviewModal>
  <PreviewModal.Player />
  <PreviewModal.Info />
  <PreviewModal.Episode />
</PreviewModal>

Enter fullscreen mode Exit fullscreen mode

Dans notre exemple, on a notre component PreviewModal qui mets à disposition plusieurs options : le player, les infos, les épisodes.
Mais ces options font partie uniquement de la previewModal, parce que ils sont fortement liée par un context.

Inplémentation:

Step 1: Création du context


const ModalContext = React.createContext(defaultContext);

Enter fullscreen mode Exit fullscreen mode

Pour l'exemple, j'ai mis en place la forme la plus basique du context, pas de provider value.

Step 2: Création du component parent


const PreviewModal = ({ children }) => {
  return (
    <>
      <p>Preview Modal like Netflix</p>
      {children}
    </>
  );
};

Enter fullscreen mode Exit fullscreen mode

Step 3: Connexion des enfants avec le parent


const { episodes } = useContext(ModalContext);

Enter fullscreen mode Exit fullscreen mode

Bonus:


PreviewModal.Player = Player;
PreviewModal.Info = Info;
PreviewModal.Episode = Episode;

Enter fullscreen mode Exit fullscreen mode

La petite astuce, PreviewModal est un objet js donc on peut lui faire stocker les components.
Je trouve qu'écrire le code de cette manière ça permet de mieux comprendre que la component parents à des "options"

Top comments (0)