recherche
Maisoninterface Webjs tutorielAjoutez une collaboration en temps réel à votre application React en quelques minutes

L'autre jour, quelqu'un que je connais m'a envoyé un message :

"Je me suis retrouvé pendant les vacances à essayer d'expliquer à mon fils comment fonctionnaient les retours sur investissement sur Zoom et cela aurait été si simple si nous avions tous les deux pu travailler dans quelque chose comme un document Google"

Défi accepté !

Ces derniers jours, je me suis amusé à construire un simulateur de retour sur investissement, où l'on peut prévoir les retours sur investissement en fonction de plusieurs paramètres.
Internet regorge de sites Web de ce type, mais dans celui-ci, je voulais explorer comment nous pouvons intégrer des fonctionnalités collaboratives et comment elles peuvent rassembler les gens.

Dans ce guide, nous verrons comment ajouter une collaboration en temps réel à une application React classique en seulement 10 minutes sans écrire de code backend ni gérer de sockets Web. En prime, nous explorerons également comment nous pouvons améliorer l'expérience utilisateur sur les sites Web collaboratifs !

Le code source complet de ce projet est disponible sur GitHub

Plongeons-nous !

Le point de départ : construire les fondations

Avant de nous plonger dans les fonctionnalités collaboratives, il nous fallait une base solide. J'ai commencé par créer une version solo où les utilisateurs pouvaient saisir leurs paramètres d'investissement. Ces entrées alimenteraient ensuite un moteur de calcul qui génère et affiche des prévisions de retour sur investissement.

J'ai utilisé bolt.new pour être opérationnel rapidement. J'ai été impressionné par le design épuré qu'il m'a offert et par la rapidité avec laquelle je suis arrivé à un point de départ acceptable. Malgré l'énorme longueur d'avance, j'avais encore besoin d'affiner une certaine logique de calcul et d'ajuster l'interface utilisateur à mon goût.


Rendre l'application collaborative

Une fois la version solo terminée, je me suis concentré sur la rendre collaborative. Ce projet représentait une opportunité parfaite pour tester React Together, une bibliothèque open source que je développe chez Multisynq depuis quelques mois.

React Together fournit des hooks et des composants qui permettent des fonctionnalités collaboratives sans la complexité de la configuration des backends ou de la gestion des connexions socket. Le processus de mise en œuvre s'est avéré simple, même s'il a révélé certains domaines à améliorer que nous aborderons dans les futures versions de la bibliothèque.

Maintenant, passons en revue les trois étapes pour ajouter la collaboration en temps réel à notre application ! Démarrer vos chronomètres ?

Étape 1 : Configuration du contexte React Together

La première étape consiste à envelopper notre application dans un fournisseur de contexte React Together. Ce composant gère toute la synchronisation de l'état et la gestion des sessions en coulisses.

// src/index.tsx
import { StrictMode } from 'react'
import { ReactTogether } from 'react-together'
import { createRoot } from 'react-dom/client'
import App from './App.tsx'
import './index.css'

createRoot(document.getElementById('root')!).render(
  <strictmode>
    <reacttogether sessionparams="{{" appid: import.meta.env apikey:>
      <app></app>
    </reacttogether>
  </strictmode>,
)

React Together utilise l'infrastructure de Multisynq pour la synchronisation des applications, qui nécessite une clé API. Vous pouvez obtenir votre clé API gratuite sur multisynq.io/account. Et ne vous inquiétez pas, ces clés sont censées être publiques, puisque vous pouvez contrôler quels domaines peuvent les utiliser.

Nous pourrions configurer React Together pour connecter automatiquement tous les utilisateurs à la même session une fois qu'ils accèdent au site Web. En fait, cela en ferait un guide en 2 étapes, mais j'ai opté pour une approche de type Google Docs où la collaboration est facultative. Les utilisateurs restent déconnectés jusqu'à ce qu'ils créent ou rejoignent explicitement une session en cliquant sur un bouton. Nous aborderons la gestion des sessions dans la troisième étape de ce guide !

Étape 2 : Synchroniser l'état entre les utilisateurs

Une fois React Together configuré, l'étape suivante consiste à synchroniser l'état entre les utilisateurs. Ce processus est incroyablement simple : il suffit de remplacer les hooks useState de React par les hooks useStateTogether de React Together.

Le hook useStateTogether fonctionne de la même manière que useState, mais nécessite un paramètre rtKey supplémentaire. Cette clé identifie de manière unique l'état dans l'application, garantissant une synchronisation appropriée même dans les mises en page réactives où les hiérarchies DOM peuvent différer entre les fenêtres.

Voici à quoi ressemble la transformation :

// src/index.tsx
import { StrictMode } from 'react'
import { ReactTogether } from 'react-together'
import { createRoot } from 'react-dom/client'
import App from './App.tsx'
import './index.css'

createRoot(document.getElementById('root')!).render(
  <strictmode>
    <reacttogether sessionparams="{{" appid: import.meta.env apikey:>
      <app></app>
    </reacttogether>
  </strictmode>,
)
// Before
import { useState } from 'react'

export default function Calculator() {
  const [startingAmount, setStartingAmount] = useState(20000);
  const [years, setYears] = useState(25);
  const [returnRate, setReturnRate] = useState(10);
  const [compoundFrequency, setCompoundFrequency] = useState("annually");
  const [additionalContribution, setAdditionalContribution] = useState(500);
  const [contributionTiming, setContributionTiming] = useState("beginning");
  const [contributionFrequency, setContributionFrequency] = useState("month");

  // ...
}

La beauté de cette approche est que l'application continue de fonctionner exactement comme avant - la seule différence est que désormais les mises à jour d'état sont synchronisées pour tous les utilisateurs connectés.

Étape 3 : ajouter la gestion de session

La dernière étape consiste à ajouter un moyen permettant aux utilisateurs de créer, rejoindre et quitter des sessions collaboratives. J'ai choisi de l'implémenter via une section d'en-tête au-dessus de la calculatrice, rendant les contrôles de session facilement visibles par tout le monde.

Add Real-Time Collaboration to Your React App in Minutes

React Together simplifie les choses en fournissant quatre accroches essentielles :

  • useIsTogether : nous indique si nous sommes actuellement en session
  • useCreateRandomSession : crée une nouvelle session privée
  • useLeaveSession : se déconnecte de la session en cours
  • useJoinUrl : fournit une URL partageable que d'autres peuvent rejoindre

Voici une version simplifiée du composant header (je viens de supprimer les noms de classes) :

// After
import { useStateTogether } from 'react-together'

export default function Calculator() {
  const [startingAmount, setStartingAmount] = useStateTogether("startingAmount", 20000);
  const [years, setYears] = useStateTogether("years", 25);
  const [returnRate, setReturnRate] = useStateTogether("returnRate", 10);
  const [compoundFrequency, setCompoundFrequency] = useStateTogether("compoundFrequency", "annually");
  const [additionalContribution, setAdditionalContribution] = useStateTogether("additionalContribution", 500);
  const [contributionTiming, setContributionTiming] = useStateTogether("contributionTiming", "beginning");
  const [contributionFrequency, setContributionFrequency] = useStateTogether("contributionFrequency", "month");

  // ...
}

Avec cette implémentation, les utilisateurs peuvent désormais démarrer des sessions collaboratives d'un simple clic. Lorsqu'une personne rejoint l'équipe en utilisant l'URL partagée, elle voit immédiatement le même état que tout le monde, avec toutes les modifications synchronisées en temps réel pour tous les participants.

Et voilà, c'est facile et ça marche ! De plus, vous pouvez le faire en moins de 10 minutes !!


Améliorer l'expérience de collaboration

Bien que la synchronisation de base fonctionnait bien, quelque chose n'allait pas : les éléments changeaient "par eux-mêmes" sur la page, sans aucune indication de qui effectuait les modifications. Il s'agit d'un défi courant dans les applications collaboratives, et des outils tels que Google Docs le résolvent en montrant où les autres utilisateurs consultent et modifient.

La véritable collaboration ne consiste pas seulement à synchroniser l'état, il s'agit également de créer un sentiment de présence. Les utilisateurs doivent se « voir » pour travailler ensemble efficacement.

J'ai initialement envisagé d'implémenter des curseurs partagés, permettant aux utilisateurs de voir les pointeurs de souris des autres. Cependant, cette approche présente des défis dans les applications Web réactives :

  • Les coordonnées de la souris ne correspondent pas clairement entre les différentes tailles de fenêtre
  • Les positions du curseur manquent souvent de contexte : on ne sait pas pourquoi le curseur d'un utilisateur se trouve à un emplacement particulier
  • La signification de la position du curseur peut être ambiguë selon les différentes dispositions d'écran

Au lieu de cela, je me suis concentré sur ce que nous voulons vraiment réaliser avec la présence des utilisateurs :

  1. Aidez les utilisateurs à sentir que les autres sont activement présents
  2. Afficher les éléments que chaque utilisateur consulte ou modifie actuellement

La solution ? Mettez en surbrillance les éléments avec lesquels les utilisateurs interagissent. Cette approche est plus simple, plus intuitive et fonctionne de manière fiable dans toutes les tailles de fenêtre. Voyons comment mettre en œuvre cela dans deux domaines clés : les onglets du graphique et les champs de saisie.

Ajout de la présence de l'utilisateur aux onglets du graphique

Commençons par une implémentation simple de la présence des utilisateurs : montrer quels utilisateurs consultent chaque onglet du graphique.

Add Real-Time Collaboration to Your React App in Minutes

Pour cela, nous avons besoin d'un type spécial d'état partagé où chaque utilisateur peut avoir sa propre valeur visible par tous les autres.

React Together fournit exactement ce dont nous avons besoin avec le hook useStateTogetherWithPerUserValues ​​(oui, c'est toute une bouchée !). Ce hook fonctionne de manière similaire à useStateTogether, mais au lieu de partager une valeur unique, il permet à chaque utilisateur d'avoir sa propre valeur visible par tous les participants. Le hook renvoie trois éléments :

  1. La valeur de l'état local de l'utilisateur actuel
  2. Une fonction pour mettre à jour l'état local
  3. Un objet contenant la valeur d'état de chaque utilisateur

Voici comment nous implémentons cela pour afficher les avatars des utilisateurs à côté des onglets :

// src/index.tsx
import { StrictMode } from 'react'
import { ReactTogether } from 'react-together'
import { createRoot } from 'react-dom/client'
import App from './App.tsx'
import './index.css'

createRoot(document.getElementById('root')!).render(
  <strictmode>
    <reacttogether sessionparams="{{" appid: import.meta.env apikey:>
      <app></app>
    </reacttogether>
  </strictmode>,
)

Dans l'extrait de code ci-dessus, nous avons remplacé un useState par un useStateTogetherWithPerUserValues, et encore une fois, l'application a continué à fonctionner comme avant, mais maintenant tout le monde pouvait voir l'état de chacun ! Ensuite, il nous suffisait de restituer les nouvelles informations que nous venions de recevoir.

Cette implémentation affiche les avatars des utilisateurs à côté de chaque onglet, indiquant clairement quels utilisateurs consultent quels graphiques. Nous filtrons l'avatar de l'utilisateur actuel pour éviter la redondance, car les utilisateurs n'ont pas besoin de voir leur propre indicateur de présence.

Ajout de la présence de l'utilisateur dans les champs de saisie

L'ajout d'indicateurs de présence aux champs de saisie suit un modèle similaire à l'exemple précédent, mais avec une exigence supplémentaire : nous devons suivre le moment où les utilisateurs commencent et arrêtent la modification. Heureusement, les composants d'Ant Design fournissent les rappels nécessaires à cet effet.

Pour chaque champ de saisie, je voulais :

  1. Afficher une bordure colorée lorsque quelqu'un d'autre est en train de modifier
  2. Afficher l'avatar de l'éditeur dans le coin supérieur droit
  3. Maintenir des couleurs cohérentes par utilisateur tout au long de l'application

Voici comment nous implémentons cela à l'aide du hook useStateTogetherWithPerUserValues :

// src/index.tsx
import { StrictMode } from 'react'
import { ReactTogether } from 'react-together'
import { createRoot } from 'react-dom/client'
import App from './App.tsx'
import './index.css'

createRoot(document.getElementById('root')!).render(
  <strictmode>
    <reacttogether sessionparams="{{" appid: import.meta.env apikey:>
      <app></app>
    </reacttogether>
  </strictmode>,
)

Bien que le code soit légèrement plus long, le principe est simple : il nous suffit de suivre quels utilisateurs modifient chaque champ de saisie, puis de restituer la visualisation de notre choix.

Cette même approche fonctionne pour tout autre type d'entrée, tel que les listes déroulantes et les barres de défilement !!

--

Et c'est tout ! Avec ce simulateur de retour sur investissement entièrement collaboratif, il sera plus facile pour mon ami d'expliquer à son fils comment les retours sur investissement fonctionnaient sur Zoom. Mission accomplie ! ✨

En voyant à quel point il est facile de créer ce genre de site collaboratif, je me demande comment Internet peut nous rapprocher lorsque nous sommes en ligne... Nous en reparlerons plus tard !

J'espère que vous avez appris quelque chose de nouveau et n'hésitez pas à nous contacter si vous avez des commentaires ou des questions !!

Bon codage ! ?

  • ? Démo en direct
  • ?‍? Code source
  • ? Réagissez ensemble Docs

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!

Déclaration
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
Au-delà du navigateur: Javascript dans le monde réelAu-delà du navigateur: Javascript dans le monde réelApr 12, 2025 am 12:06 AM

Les applications de JavaScript dans le monde réel incluent la programmation côté serveur, le développement des applications mobiles et le contrôle de l'Internet des objets: 1. La programmation côté serveur est réalisée via Node.js, adaptée au traitement de demande élevé simultané. 2. Le développement d'applications mobiles est effectué par le reactnatif et prend en charge le déploiement multiplateforme. 3. Utilisé pour le contrôle des périphériques IoT via la bibliothèque Johnny-Five, adapté à l'interaction matérielle.

Construire une application SaaS multi-locataire avec next.js (intégration backend)Construire une application SaaS multi-locataire avec next.js (intégration backend)Apr 11, 2025 am 08:23 AM

J'ai construit une application SAAS multi-locataire fonctionnelle (une application EdTech) avec votre outil technologique quotidien et vous pouvez faire de même. Premièrement, qu'est-ce qu'une application SaaS multi-locataire? Les applications saas multi-locataires vous permettent de servir plusieurs clients à partir d'un chant

Comment construire une application SaaS multi-locataire avec Next.js (Frontend Integration)Comment construire une application SaaS multi-locataire avec Next.js (Frontend Integration)Apr 11, 2025 am 08:22 AM

Cet article démontre l'intégration frontale avec un backend sécurisé par permis, construisant une application fonctionnelle EdTech SaaS en utilisant Next.js. Le frontend récupère les autorisations des utilisateurs pour contrôler la visibilité de l'interface utilisateur et garantit que les demandes d'API adhèrent à la base de rôles

JavaScript: Explorer la polyvalence d'un langage WebJavaScript: Explorer la polyvalence d'un langage WebApr 11, 2025 am 12:01 AM

JavaScript est le langage central du développement Web moderne et est largement utilisé pour sa diversité et sa flexibilité. 1) Développement frontal: construire des pages Web dynamiques et des applications à une seule page via les opérations DOM et les cadres modernes (tels que React, Vue.js, Angular). 2) Développement côté serveur: Node.js utilise un modèle d'E / S non bloquant pour gérer une concurrence élevée et des applications en temps réel. 3) Développement des applications mobiles et de bureau: le développement de la plate-forme multiplateuse est réalisé par réact noral et électron pour améliorer l'efficacité du développement.

L'évolution de JavaScript: tendances actuelles et perspectives d'avenirL'évolution de JavaScript: tendances actuelles et perspectives d'avenirApr 10, 2025 am 09:33 AM

Les dernières tendances de JavaScript incluent la montée en puissance de TypeScript, la popularité des frameworks et bibliothèques modernes et l'application de WebAssembly. Les prospects futurs couvrent des systèmes de type plus puissants, le développement du JavaScript côté serveur, l'expansion de l'intelligence artificielle et de l'apprentissage automatique, et le potentiel de l'informatique IoT et Edge.

Démystifier javascript: ce qu'il fait et pourquoi c'est importantDémystifier javascript: ce qu'il fait et pourquoi c'est importantApr 09, 2025 am 12:07 AM

JavaScript est la pierre angulaire du développement Web moderne, et ses principales fonctions incluent la programmation axée sur les événements, la génération de contenu dynamique et la programmation asynchrone. 1) La programmation axée sur les événements permet aux pages Web de changer dynamiquement en fonction des opérations utilisateur. 2) La génération de contenu dynamique permet d'ajuster le contenu de la page en fonction des conditions. 3) La programmation asynchrone garantit que l'interface utilisateur n'est pas bloquée. JavaScript est largement utilisé dans l'interaction Web, les applications à une page et le développement côté serveur, améliorant considérablement la flexibilité de l'expérience utilisateur et du développement multiplateforme.

Python ou JavaScript est-il meilleur?Python ou JavaScript est-il meilleur?Apr 06, 2025 am 12:14 AM

Python est plus adapté à la science des données et à l'apprentissage automatique, tandis que JavaScript est plus adapté au développement frontal et complet. 1. Python est connu pour sa syntaxe concise et son écosystème de bibliothèque riche, et convient à l'analyse des données et au développement Web. 2. JavaScript est le cœur du développement frontal. Node.js prend en charge la programmation côté serveur et convient au développement complet.

Comment installer JavaScript?Comment installer JavaScript?Apr 05, 2025 am 12:16 AM

JavaScript ne nécessite pas d'installation car il est déjà intégré à des navigateurs modernes. Vous n'avez besoin que d'un éditeur de texte et d'un navigateur pour commencer. 1) Dans l'environnement du navigateur, exécutez-le en intégrant le fichier HTML via des balises. 2) Dans l'environnement Node.js, après avoir téléchargé et installé Node.js, exécutez le fichier JavaScript via la ligne de commande.

See all articles

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌

Outils chauds

VSCode Windows 64 bits Télécharger

VSCode Windows 64 bits Télécharger

Un éditeur IDE gratuit et puissant lancé par Microsoft

mPDF

mPDF

mPDF est une bibliothèque PHP qui peut générer des fichiers PDF à partir de HTML encodé en UTF-8. L'auteur original, Ian Back, a écrit mPDF pour générer des fichiers PDF « à la volée » depuis son site Web et gérer différentes langues. Il est plus lent et produit des fichiers plus volumineux lors de l'utilisation de polices Unicode que les scripts originaux comme HTML2FPDF, mais prend en charge les styles CSS, etc. et présente de nombreuses améliorations. Prend en charge presque toutes les langues, y compris RTL (arabe et hébreu) ​​et CJK (chinois, japonais et coréen). Prend en charge les éléments imbriqués au niveau du bloc (tels que P, DIV),

MantisBT

MantisBT

Mantis est un outil Web de suivi des défauts facile à déployer, conçu pour faciliter le suivi des défauts des produits. Cela nécessite PHP, MySQL et un serveur Web. Découvrez nos services de démonstration et d'hébergement.

Version Mac de WebStorm

Version Mac de WebStorm

Outils de développement JavaScript utiles

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Puissant environnement de développement intégré PHP