Maison > interface Web > js tutoriel > Gestion de l'état de l'application dans Puck

Gestion de l'état de l'application dans Puck

DDD
Libérer: 2025-01-14 22:35:45
original
433 Les gens l'ont consulté

Puck est l'éditeur visuel open source pour React, qui donne du pouvoir à la prochaine génération de créateurs de pages et de produits sans code. Donnez-nous une étoile sur GitHub ! ⭐️


Puck a connu une croissance rapide et c’est génial à regarder ! ? Les développeurs de tous horizons repoussent les limites de ce que cet éditeur visuel open source peut faire. Mais à mesure que de plus en plus de personnes se lancent dans Puck, une question revient sans cesse dans notre communauté Discord :

« Comment puis-je transmettre des données ou partager un état entre des composants dans Puck ? »

En d’autres termes : comment faire réagir un composant aux changements d’un autre ? Par exemple, vous pouvez créer un composant DropZone avec une entrée de recherche, afin que toutes les listes déposées à l'intérieur puissent lire sa valeur :

Managing application state in Puck

Au début, la magie intégrée de Puck pourrait vous faire penser qu'il gère l'état d'une manière unique. Mais voici le problème : Puck n'est que React, tout comme les composants que vous lui transmettez. Cela signifie que vous pouvez compter sur n'importe quelle bibliothèque d'état ou outil que vous utiliseriez normalement pour gérer et partager des données entre les composants. Pour cet article, je vais rester simple et vous apprendre à résoudre ce problème en utilisant Context.

Avant de commencer : je suppose que vous avez une compréhension de base de Puck et de son fonctionnement. Si vous êtes nouveau ici, ce n’est pas un problème : vous êtes invités à suivre ! Mais je vous recommande de consulter d'abord le guide de démarrage pour vous familiariser avec les bases

Configuration du projet

Pour faciliter les choses, j'ai préparé un projet React de base sur GitHub avec Puck préinstallé et prêt à fonctionner. Clonez-le et installez-le en exécutant les commandes suivantes dans votre terminal :

git clone https://github.com/FedericoBonel/basic-puck-app
cd ./basic-puck-app
npm install
Copier après la connexion
Copier après la connexion
Copier après la connexion

Vous travaillez déjà sur un projet existant ? Aucun problème du tout ! Vous pouvez simplement installer Puck en tant que dépendance avec NPM :

npm i @measured/puck --save
Copier après la connexion
Copier après la connexion
Copier après la connexion

Et si vous utilisez des frameworks comme Next.js ou Remix, Puck propose des recettes officielles pour rendre le processus de configuration fluide.

Pour ce tutoriel, je suppose que vous avez cloné le dépôt GitHub pour que les choses restent simples. Cela dit, les concepts et les étapes s'appliqueront à n'importe quelle configuration : mettez simplement à jour les noms de fichiers si nécessaire pour les adapter à la structure de votre projet.

Configuration de la rondelle

Une fois votre projet prêt à démarrer, l'étape suivante consiste à configurer Puck. Ouvrez le fichier src/App.jsx et échangez son contenu avec le code ci-dessous. Cela configurera Puck avec une configuration de base pour glisser-déposer deux composants :

  • Un composant Dashboard qui accueille les utilisateurs et contient une DropZone pour imbriquer d'autres composants
  • Un composant ArticleList qui affiche une liste d'articles dans le tableau de bord
git clone https://github.com/FedericoBonel/basic-puck-app
cd ./basic-puck-app
npm install
Copier après la connexion
Copier après la connexion
Copier après la connexion

Managing application state in Puck

Super ! Votre configuration de base est maintenant terminée. Passons ensuite à l'ajout d'un état partagé à votre éditeur.

Ajout de contexte

React Context est la solution parfaite à notre problème car il offre un moyen simple de partager et de gérer des données sur tous vos composants, à la fois à l'intérieur et à l'extérieur de l'éditeur. Il crée un « état global » auquel vous pouvez accéder à tout moment, ce qui le rend idéal pour les scénarios dans lesquels vous devez extraire des données de l'extérieur de Puck, comme le thème sélectionné ou l'utilisateur connecté, ou partager des données entre les composants de Puck.

Dans ce guide, je vais vous présenter deux cas d'utilisation courants de React Context dans Puck :

  1. Accès aux données stockées en dehors de Puck : Nous allons commencer par configurer un contexte contenant les données d'un utilisateur connecté en dehors du composant, puis accédez-y à partir des composants Puck.
  2. Transmission de données à un composant imbriqué : Ensuite, nous allons configurer un contexte de requête de recherche dans le tableau de bord. Cela nous permettra de capturer la requête de recherche d'un utilisateur, de la stocker dans le contexte et de la transmettre au composant ArticleList. L'objectif est de filtrer la liste des articles en fonction de la requête de l'utilisateur, démontrant comment transmettre des données entre un composant Puck parent et enfant.

Étape 1 : Définir le contexte en dehors de Puck

La configuration du contexte dans Puck suit le même schéma que n'importe quelle application React. Vous créez un fournisseur de contexte pour définir et gérer votre état partagé, l'envelopper autour d'un composant parent et accéder ou mettre à jour l'état partout où cela est requis dans votre application.

Commencez par créer un nouveau contexte pour les données utilisateur. Ce contexte comprendra à la fois l'objet utilisateur et une fonction pour mettre à jour l'état de l'utilisateur.

npm i @measured/puck --save
Copier après la connexion
Copier après la connexion
Copier après la connexion

Étape 2 : Créer le fournisseur de contexte en dehors de Puck

Ensuite, créez un composant UserProvider qui enveloppera votre éditeur Puck. Ce fournisseur gérera l'état de l'utilisateur et le mettra à la disposition de tous les enfants.

Par souci de concision, j'utilise un utilisateur factice et la fonction setter renvoyée par useState.

// App.jsx
import { Puck, DropZone } from "@measured/puck";
import "@measured/puck/puck.css";

// The configs for your draggable components
// Ideally you would pull these out into their own files
const dashboardConfig = {
  render: () => {
    return (
      <div
       >



<p>Once you’ve updated the file, start the application in development mode, and navigate to http://localhost:5173 to verify everything is working as expected:<br>
</p>

<pre class="brush:php;toolbar:false">npm run dev
Copier après la connexion

Étape 3 : Intégrer le fournisseur à Puck

Pour intégrer le fournisseur à votre éditeur Puck, enveloppez simplement l'éditeur avec le UserProvider. Vous pouvez placer le UserProvider n'importe où au-dessus de l'éditeur dans votre arborescence de composants (comme dans votre fichier d'index), et cela fonctionnera très bien. Une fois que vous avez fait cela, tous les composants de votre éditeur auront accès au contexte !

git clone https://github.com/FedericoBonel/basic-puck-app
cd ./basic-puck-app
npm install
Copier après la connexion
Copier après la connexion
Copier après la connexion

Étape 4 : Consommer le contexte dans les composants Puck

Vous pouvez désormais accéder au UserContext dans n'importe lequel de vos composants Puck. En suivant notre exemple de cas d'utilisation, mettons à jour le composant Dashboard afin qu'il affiche un message de « bienvenue » pour les utilisateurs connectés et un message de « bienvenue générique » pour les invités.

npm i @measured/puck --save
Copier après la connexion
Copier après la connexion
Copier après la connexion

Étape 7 : Consommer le contexte des composants Puck

Maintenant, nous allons lire le contexte dans les composants qui sont déposés dans le fournisseur de contexte. Dans notre cas, nous consommerons le contexte dans le composant ArticleList, que l'utilisateur a imbriqué dans le tableau de bord via DropZone. Cela permet à ArticleList de répondre aux modifications apportées à la requête de recherche et de se mettre à jour en conséquence.

// App.jsx
import { Puck, DropZone } from "@measured/puck";
import "@measured/puck/puck.css";

// The configs for your draggable components
// Ideally you would pull these out into their own files
const dashboardConfig = {
  render: () => {
    return (
      <div
       >



<p>Once you’ve updated the file, start the application in development mode, and navigate to http://localhost:5173 to verify everything is working as expected:<br>
</p>

<pre class="brush:php;toolbar:false">npm run dev
Copier après la connexion

Si vous vous dirigez maintenant vers l'éditeur, faites glisser un composant Dashboard sur le canevas, déposez une ArticleList à l'intérieur et modifiez le champ initialQuery, vous verrez la liste filtrer dynamiquement les articles en fonction de la requête. ?

Managing application state in Puck

Vous pouvez même étendre cette configuration en faisant en sorte que plusieurs composants de liste avec un contenu différent réutilisent le même contexte de requête.

? Et c'est tout ! Vous disposez désormais d’un état partagé entre les composants Puck imbriqués. ?

Avantages et inconvénients de l'utilisation de React Context

✅ Avantages :

  • Fournit une solution robuste pour partager l'état entre les composants, à la fois à l'intérieur et à l'extérieur de Puck
  • S'intègre parfaitement aux modèles et composants React existants
  • Peut gérer une logique et un état complexes
  • Zéro dépendance externe car React Context est fourni avec React

❌ Inconvénients :

  • Les performances peuvent se dégrader si vous mettez fréquemment à jour l'état en haut d'une grande arborescence de composants, car chaque abonné doit effectuer un nouveau rendu
  • Lors de la gestion de plusieurs fournisseurs de contexte, les choses peuvent devenir plus difficiles à déboguer

Aller plus loin

Il existe de nombreuses façons d'améliorer la gestion de l'état partagé dans Puck en fonction de la complexité de votre éditeur :

  • Optimiser l'utilisation du contexte - Si vous remarquez des problèmes de performances ou des rendus inutiles, envisagez de diviser votre contexte en contextes plus petits et plus ciblés. Cela permet aux composants de s'abonner uniquement aux parties de l'état dont ils ont besoin, minimisant ainsi les nouveaux rendus.
  • Incorporer des bibliothèques d'états - Si vous avez plusieurs états partagés et une logique plus complexe, vous pouvez aller au-delà de React Context et utiliser votre bibliothèque d'états préférée. Qu'il s'agisse de Redux, Zustand ou d'une autre bibliothèque que votre projet utilise déjà, ceux-ci peuvent simplifier la gestion des états complexes et améliorer les performances de rendu.
  • Tirer parti de l'état côté serveur - Si votre application s'appuie fortement sur les données extraites d'un serveur, envisagez d'utiliser une bibliothèque comme TanStack Query ou SWR. Ces bibliothèques gèrent la mise en cache, la récupération et la synchronisation pour vous, réduisant ainsi le besoin d'un état complexe partagé côté client.

À votre tour de construire plus intelligemment avec Puck ?

Faire passer la gestion d'état partagé dans Puck au niveau supérieur ouvre un monde de possibilités pour créer des constructeurs de pages dynamiques et réactifs. J’ai hâte de voir les applications uniques et puissantes que vous créerez en utilisant ces stratégies.

Donc, si cet article vous a inspiré pour construire quelque chose, si vous avez une question sur Puck ou si vous souhaitez contribuer, voici comment vous pouvez vous impliquer :

  • ? Star Puck sur GitHub pour montrer votre soutien et inspirer les autres à explorer.
  • ? Rejoignez notre communauté Discord pour vous connecter, apprendre et collaborer.
  • ? Suivez-nous sur X et Bluesky pour des aperçus, des mises à jour et des conseils.
  • ? Explorez la documentation pour découvrir des techniques avancées pour booster vos builds.

L'avenir de Puck et de l'innovation sans code est entre vos mains. Commencez à construire dès aujourd’hui et redéfinissons ensemble ce qui est possible ! ?

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal