Maison >interface Web >js tutoriel >Création d'une application de prise de notes avec React et Flux
React, par Facebook, est une très belle bibliothèque pour créer des interfaces utilisateur. Le seul problème est que React ne se soucie pas de la façon dont votre application gère les données. La plupart des gens utilisent React comme V dans MV *. Ainsi, Facebook a introduit un modèle appelé Flux qui apporte une approche fonctionnelle de la gestion des données dans une application. Ce tutoriel donne une brève introduction sur le modèle de flux et montre comment créer une application de prise de notes à l'aide de React et Flux Architecture.
Le flux repose sur le flux de données unidirectionnel. Nous avons deux composants clés dans le motif de flux:
pour renforcer le concept, prenons un exemple du monde réel. Par exemple, dans une application de création de notes, vous pouvez avoir l'arrangement suivant:
Ainsi, le flux de données peut être visualisé comme suit:
Le plus grand avantage du modèle de flux est qu'il maintient vos données d'application stables. Comme la mutation ne peut être effectuée que par des actions, il est plus facile de comprendre comment le changement de données affecte l'ensemble de l'application.
Remarque:
Si vous avez parcouru le guide de Facebook, vous avez peut-être remarqué le concept d'un répartiteur. Un répartiteur est un registre des rappels dans les magasins. Lorsqu'une action est invoquée, le répartiteur y répond et envoie les données associées à tous les magasins enregistrés. Les magasins vérifient ensuite le type d'action et effectuez des tâches en conséquence.
Le processus ci-dessus a été grandement simplifié par une bibliothèque appelée reflux. Il supprime le concept de répartiteurs en rendant les actions à écouter. Ainsi, dans le reflux, les magasins peuvent écouter directement les actions et répondre à leur invocation.
pour comprendre le motif de flux entièrement, créons une application simple de prise de notes avec reflux, react et node.js.
Nous utiliserons Utiliser React et Reflux comme modules de nœud et utiliserons Browserify pour les rendre également disponibles du côté client. Alors, voici comment nous avons configuré l'environnement:
Vous pouvez télécharger le code de GitHub et ouvrir GruntFile.js pour en savoir plus sur les tâches. Une fois que vous avez le référentiel sur votre machine, vous pouvez simplement exécuter NPM Installer pour installer les modules de nœud requis. Exécutez les commandes suivantes et démarrez le développement:
grunt watch grunt nodemon
L'application est accessible sur https: // localhost: 8000 et fonctionne comme suit:
Commençons par divers composants de l'application. Voici comment nous pouvons diviser notre interface utilisateur en divers composants:
Voici ce que fait chaque composant:
Utilisons le reflux pour créer certaines actions. Si vous ouvrez des actions / notEACTIONS.js, vous pouvez voir comment les actions sont créées. Voici l'extrait:
grunt watch grunt nodemon
reflux.CreateActions est utilisé pour créer des actions. Nous exportons ces actions afin de les utiliser dans nos composants.
Nous avons un seul magasin appelé Nottore qui maintient un tableau de notes. Le code suivant est utilisé pour créer le magasin (Stores / Nottore.js):
<span>var Reflux = require('reflux'); </span> <span>var NoteActions = Reflux.createActions([ </span> <span>'createNote', </span> <span>'editNote' </span><span>]); </span> module<span>.exports = NoteActions;</span>
Comme vous le voyez, nous écoutons deux actions, Creenote et EditNote, à l'intérieur de la méthode init. Nous enregistrons également des rappels pour exécuter lorsque les actions sont invoquées. Le code pour l'ajout / mise à jour d'une note est assez simple. Nous exposons également les getters pour récupérer la liste des notes. Enfin, le magasin est exporté afin qu'il puisse être utilisé dans notre composant.
Tous nos composants React sont situés dans le répertoire React / Components. J'ai déjà montré la structure globale de l'interface utilisateur. Vous pouvez consulter le code source téléchargé pour en savoir plus sur chaque composant. Ici, je vais vous montrer l'essentiel (c'est-à-dire comment nos composants invoquent les actions et interagissent avec le magasin).
Nothelistbox:
Ce composant obtient une liste de notes de Nottore et les alimente en composant de note qui rend ensuite les notes. Voici à quoi ressemble le composant:
<span>var Reflux = require('reflux'); </span><span>var NoteActions = require('../actions/NoteActions'); </span> <span>var _notes = []; //This is private notes array </span> <span>var NoteStore = Reflux.createStore({ </span> <span>init: function() { </span> <span>// Here we listen to actions and register callbacks </span> <span>this.listenTo(NoteActions.createNote, this.onCreate); </span> <span>this.listenTo(NoteActions.editNote, this.onEdit); </span> <span>}, </span> <span>onCreate: function(note) { </span> _notes<span>.push(note); //create a new note </span> <span>// Trigger an event once done so that our components can update. Also pass the modified list of notes. </span> <span>this.trigger(_notes); </span> <span>}, </span> <span>onEdit: function(note) { </span> <span>// Update the particular note item with new text. </span> <span>for (var i = 0; i < _notes.length; i++) { </span> <span>if(_notes[i]._id === note._id) { </span> _notes<span>[i].text = note.text; </span> <span>this.trigger(_notes); </span> <span>break; </span> <span>} </span> <span>} </span> <span>}, </span> <span>//getter for notes </span> <span>getNotes: function() { </span> <span>return _notes; </span> <span>}, </span> <span>//getter for finding a single note by id </span> <span>getNote: function(id) { </span> <span>for (var i = 0; i < _notes.length; i++) { </span> <span>if(_notes[i]._id === id) { </span> <span>return _notes[i]; </span> <span>} </span> <span>} </span> <span>} </span><span>}); </span> module<span>.exports = NoteStore; //Finally, export the Store</span>
Lorsque le composant monte, nous commençons à écouter l'événement de changement de Nottore. Ceci est diffusé chaque fois qu'il y a une mutation dans la liste des notes. Notre composant écoute cet événement afin qu'il puisse renforcer les notes en cas de changement. La ligne suivante enregistre un auditeur:
<span>var React = require('react'); </span><span>var NoteList = require('./NoteList.jsx'); </span><span>var NoteStore = require('../../stores/NoteStore'); </span> <span>var NoteListBox = React.createClass({ </span> <span>getInitialState: function() { </span> <span>return { notes: NoteStore.getNotes() }; </span> <span>}, </span> <span>onChange: function(notes) { </span> <span>this.setState({ </span> <span>notes: notes </span> <span>}); </span> <span>}, </span> <span>componentDidMount: function() { </span> <span>this.unsubscribe = NoteStore.listen(this.onChange); </span> <span>}, </span> <span>componentWillUnmount: function() { </span> <span>this.unsubscribe(); </span> <span>}, </span> <span>render: function() { </span> <span>return ( </span> <span><div className="col-md-4"> </span> <span><div className="centered"><a href="" onClick={this.onAdd}>Add New</a></div> </span> <span><NoteList ref="noteList" notes={this.state.notes} onEdit={this.props.onEdit} /> </span> <span></div> </span> <span>); </span> <span>} </span><span>}); </span> module<span>.exports = NoteListBox;</span>
Ainsi, chaque fois qu'il y a une méthode de changement Onchange du composant. Cette méthode reçoit une liste de notes mise à jour et modifie l'état.
<span>this.unsubscribe = NoteStore.listen(this.onChange);</span>
comme celle-ci.State.Notes est passé comme un accessoire au note de note, chaque fois que l'État change de note de note de note.
Enfin, nous écrivons ce.unSubscribe () à l'intérieur du composantwillunmount pour supprimer l'auditeur.
Donc, c'est ainsi que Nothelist reste toujours à jour en écoutant l'événement de changement du magasin. Voyons maintenant comment une note est créée / modifiée.
NOCREATIONBOX:
Jetez un œil à la méthode suivante de NOCREATIONBOX:
grunt watch grunt nodemon
Cette méthode est appelée chaque fois que le bouton de sauvegarde est cliqué. Il accepte NOTteText comme son premier paramètre. Si un ID est passé comme deuxième paramètre, nous savons qu'il s'agit d'une opération d'édition et invoquez la notation d'action.editNote (). Sinon, nous générons un ID pour la nouvelle note et appelons NotEACTIONS.CREENTENOTE (). N'oubliez pas que notre Nottore écoute ces actions. Selon l'action, le rappel de magasin approprié est exécuté. Une fois que les données sont mutées, le magasin déclenche un événement de changement et notre notation de composant se met à jour.
C'est ainsi que les données se déroulent dans le système et sort par la suite dans une application basée sur le flux.
Vous vous demandez peut-être pourquoi j'ai utilisé React et Reflux sur le serveur. L'une des fonctionnalités intéressantes de React est que les composants peuvent être rendus à la fois sur le client et le serveur. En utilisant cette technique, vous pouvez créer des applications isomorphes qui rendent sur serveur et également se comporter comme des applications à page unique. Bien que cela ne soit pas nécessaire pour une application de notes, vous pouvez facilement utiliser cette configuration pour créer des applications isomorphes complexes à l'avenir.
Je vous encourage à passer par le code source et à l'améliorer davantage car il y a beaucoup de place pour les améliorations. Si vous avez des questions, faites-le moi savoir dans les commentaires.
Merci d'avoir lu!
Le flux est un modèle de conception que Facebook utilise en interne avec React. Il complète les composants de vue composables de React en utilisant un flux de données unidirectionnel. Dans le contexte de la création d'une application de prise de notes, Flux joue un rôle crucial dans la gestion du flux de données. Il garantit que les données se déplacent dans une seule direction, des actions aux magasins, puis aux vues. Cela rend l'application plus prévisible et plus facile à comprendre, car elle évite la complexité du partage des données entre les composants et la confusion de la liaison des données bidirectionnelle.
Réagir et Flux travaillent ensemble pour créer une application de prise de notes en divisant les responsabilités. React est responsable du rendu des vues et de la réponse aux entrées des utilisateurs, tandis que Flux gère le flux de données de l'application. Lorsqu'un utilisateur interagit avec les composants React (comme l'ajout d'une nouvelle note), il déclenche une action. Cette action met à jour le magasin (les données centrales de l'application) via un répartiteur. Le magasin émet alors un événement de changement, provoquant la mise à jour et la réapprovisionnement des composants de React si nécessaire.
L'architecture de flux se compose de quatre composants principaux: actions, répartiteur, magasins et vues (composants de réaction). Les actions sont des charges utiles d'informations qui envoient des données de l'application au répartiteur. Le répartiteur est une sorte de centre central qui gère tous les flux de données dans l'application. Les magasins contiennent l'état d'application et la logique, et ils sont mis à jour par le répartiteur. Enfin, les vues (React Composants) écoutent les changements dans les magasins et se renvoient lorsque ces changements se produisent.
En flux, l'état de votre application est généralement stocké dans les magasins. Lorsqu'une action se produit (comme l'ajout d'une nouvelle note), elle envoie des données au répartiteur. Le répartiteur envoie ensuite ces données au magasin concerné. Le magasin met à jour son état et émet un événement de changement. Tous les composants React qui écoutent les changements dans le magasin se mettront ensuite à jour et se renforceront, reflétant le nouvel état de l'application.
L'architecture de flux aide à maintenir l'évolutivité de l'application de prise de notes en fournissant un flux de données clair et prévisible. Cela rend l'application plus facile à comprendre et à modifier à mesure qu'elle se développe en complexité. Le flux de données unidirectionnel garantit que les changements dans une partie de l'application n'affectent pas de façon inattendue d'autres parties, réduisant la probabilité de bogues et facilitant la test et la débogage de l'application. Application de prise de notes à l'aide de React et Flux?
Comment puis-je tester mon application de prise de notes construite avec React et Flux?
Comment puis-je déboguer mon application de prise de notes construite avec React et Flux?
Oui, vous pouvez utiliser d'autres bibliothèques ou frameworks avec React et Flux lors de la création de votre application de prise de notes. Par exemple, vous pouvez utiliser une bibliothèque de routage comme React Router for Navigation, une bibliothèque de test comme Jest for Test ou une bibliothèque d'interface utilisateur comme Material-UI pour styliser votre application. Le choix des bibliothèques ou des frameworks dépendra de vos besoins et préférences spécifiques.
Optimisation des performances d'un L'application de prise de notes construite avec React et Flux peut impliquer diverses stratégies. Une stratégie courante consiste à garantir que les composants ne renforcent que lorsque cela est nécessaire, en gérant soigneusement l'état et les accessoires et en utilisant le purecomposant de React ou devrait composer le cas échéant. D'autres stratégies pourraient inclure l'optimisation du temps de chargement initial de l'application par division du code ou l'optimisation des données en utilisant une bibliothèque comme Relay ou Apollo.
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!