L'État est une Grande Partie d'une demande Révisissante, c'est pourquoi Redux Est Générement Associé à Celui-Ci. CES Données Proviennent Souvent de Données de Données, Qui Nécessite Une Demande et une Réponse. Verser des applications Countryes, la communication de la cette Peut-être Consvere. Il Peut-Être Difficile d'Essayer De Gérer Uniquement dans les composants Réactif.
CELA INTOOLITUIT ÉMÉMENT DE NOUVEAUX Problèmes - QUE SE Passe-T-IL Sile Charge Charge Lentiment Ou NE SE CHARGE PAS DU TOUT? Chaque Compostante Traitant des Données Asynchrones Dévir Contenir UNE Logique Pour Gérer CES Scénarios.
ONU 'THUNK' EST UN CONCEPTEUR QUI PEUT A INIDER À CETTE SITY. CHAQUE THUNK EST UNE FONCTION QUI RETOURNE UNE AUTRE FONCTION. Cette Fonction Peut alors d'estre appelée à UN POINT ULTIRIEUR, UN PUU COMBE NON Rappel. SI NOUS POUVONS ENVOYER UN THUNK AU LIEU D'UN OBJET D'ACTION, NOUS POUVONS AJOUTER UNE LOGIQUE SUPPLÉMENTAIRE EN RÉACTION À UN AUTRE ÉVÉNEMENT.
REDUX THUNK EST UNE BIBLIOTHÈQUE QUE SE FUNCTION ENTRE LES ACTIONS Expédiées et le Réducteur. LORSQUES VOIT UN ONU THUNK EST EXPÉDIÉ, IL Passe-Offres Méthodes dans la Fonction Retournée Retournée Utilee Pour Envoyer d'Autres Actions, commémes non Événement de Réussite ou d'Erreur.
Dans les intérieurs CE Didacticiel, NOUS UTILISERONS THUNKS POUR VOUS ARTIDE À TIRE À TIRER DANS DONES D'UN SERVEUR PLUTOT Q'À PARTIR D'UN FICHIER JSON, Travaillant Avec Photosphare - Application photo-commentaire Alimée Par Redux.
VOUS AVEZ ONU NOUVEAU PROJET DE SITE DE SITE, MAIS IL Y BESIN DE RETENANT SIMPLE? VOICI NOS GUIDES AU MEILLEUR Générateur de site Web ET Hébergement Web Service des Nations Unies. Partager des Fichiers AVEC D'AUTRES? Obtenir votre stockage en ligne Droit.
Téléchargez les Fichiers Pour le tutoriel CE.
Il Y a Deux Parties de CE Projet - Le Site Front End et Le Servertur d'Extrémité Arrière Fonctionnement. BIEN QUE LE DIDACTICIEL SE CONCENTRE SUR LE FRONT-END, NOUS AVONS BESOIN D'UN SERVEUR EN COURS D'EXÉCUT POUR ALLER Chercher Les Photos. Téléchargez les FICHIERS DE PROJET ET INSTALLENTZ LES DÉPENDANCES POUR LE SITE ET LE SERVEUR. Exécutez les Serverrs pour les Deux et Laisez-les Courir en Arrière-Plan.
/ * Terminal de l'ONU à l'INTÉRIEUR / SITE * /
& gt; maigre
& gt; Début de Fil
/ * Terminal de l'ONU à l'INTÉRIEUR / SERVEUR * /
& gt; maigre
& gt; LE FIL COMMENCE
Redux Thunk Est Un Nations Unies middleware - Fonctionnalité Qui est ASSIS ENTRE LES ACTIONS ET LES RÉCUCTEURS QUI PUUVENT CHANGER LA FAÇON DONT CES ACTIONS SE COMPORTEMENT. REDUX PREND EN CHARISE PLUSIEURS ENSEMBLES DE MIDENTAILLAIRE COVRANT L'ENSUELLE DE L'APPLICATION. ILS Sont Ajoutés Lorsque Le Magasin est Créé en utillistant Le compositeur Méthode. Ajoter middleware au Créditore Méthode Dans Index.js.
Importateur {ApplyMidDleware, compose}
de "redx";
Importateur Thunk de "Redux-thunk";
[...]
Const Store = Creeestore (
rootReducer,
compositeur(
applyMiddleware (Thunk),
devtools
)
);
La Première a choisi à Faire Est de Charger Les Photos Dans La Galerie. Comme des Actions Ordinaires, NOUS Avons Besoin de Créateurs d'Action Pour les Différents État d'Aussi Aussi Asynchrone Prendra. La Plupart Auront début , Succès ET Erreur Actions. Cuzz-CI OnseSé Redux Savoir Ce que Le JavaScript est occupé à faire. Nuque Actions / Photos / Photos.Js , Mise En Place de Trois Créateurs d'Action Pour CES Différents État.
Export const loadgalleryStart = () = & gt; ({
Type: load_gallery_start});
Export const loadgallerySuccess =
photos = & gt; ({
Type: load_gallery_success,
Photos
});
Export const loadgalleryERror = () = & gt; ({
Type: load_gallery_error});
Thunks Fonctionne exactement La Même a choisi les Créateurs d'action. Nous Expédiations Toujours la Valeur de Retour, Mais Cette Fois-Ci, IL Renvoine Un Fonction au lieu d'ONU Objet. Le Middleware Que Nous Avons Confons Configuré PRÉCÉMENT PASSERA UNE MÉTHODE D'ÉXPÉRIEUR DANS LA FONCTION RENVOYÉE. CELA NOUS PERMETER D'ENVOYER PLUS D'ACTIONS À REDUX APRÈS LA PREMIÈRE ENVOI. Créer Un loadgallery Méthode Qui Renvoie Une Fonction. Pour l'Instant, Demandez-Lui d'Envoyer une action pour Montrer que la galerie Est-la Galerie Est Toujours en Cours de chargement.
Export const loadgallery = () = & gt;
Dispatch = & GT; {
Dispatch (loadgalleryStart ());
};
NOUS SOMMES PRÊTS ENTREENANT À COMMENDURE À ALLER CHERCHER DU SERVEUR QUE NOUS AVONS MIS EN PLACE AU DEBUT. NOUS POUVONS LE FAIR EN UTILISANT axios - UN PAQUET CONÇU POUR TRAVAILLER AVEC DES DIFFÉRENTES SUR DES DIFFÉRENTES DIFFÉRENTES. Importateur axios ET FAIR UNE Demande Versez les Photos Dans loadgallery . SI LA PROMESSE RÉSOUT, Envoyez L'Action de Réussite et ne pas EXPÉDIER L'Action d'Erreur. Avec Cela, La Structure du Thunk Est complète.
Importateur Axios de "Axios";
[...]
Renvoyer Axios
.GET ("http: // localhost: 3001 / photos")
.Ce (Réponse = & GT; Expédition (
loadgallerySuccy (Réponse.data)))
.Catch (() = & GT; Expédition (
LOADGALLERYERROR ()));
Le Thunk Ne Fera Rien Jusqu'à CE Qu'il Soit Expédié. NOUS POUVONS LE FAIR DANS UNE COMPOSANTE RÉAGISSANTE COMPTE TOUTE AUTRE Action. Un moment de Bon moment pour Commencer à chargeur Les Photos Est Lorsque L'Utilisateur Vise La Galerie Principale. NOUS POUVONS UTILISER RECOIR COMPOSANTDIDMOUNT LA MÉTHODE DE CYCLE DE VIE EN TANT QUE DÉCLENCHEUR, APRES AVOIR VÉRIMÉS LA GALERIE N'EST PAS DÉJÀ CHARGÉE. Nuque Composants / Conteneur / Galerie / Galerie.js Expédier Un loadgallery action en l'ajout à MapDispatchtoprops ET L'APPELANT DANS COMPOSANTDIDMOUNT .
ComponentDidMount () {
si (! this.props.photosloaded) {
cela.props.loadGallery ();
}
}
Exportateur const de mapdispatchtoprops =
Dispatch = & GT; ({
LoadGallery: () = & GT;
Dispatch (loadgallery ()),
});
Lorsque les photos Sont revenus du serveur, nous Envoyons Un Load_gallery_success Action AVEC Les photos. NOUS DevONS L'Obtenir Dans l'État à Travers Le Photos Réducteur. SE Diriger vers vers Réducteurs / Photos / Photos.Js ET AJOUTER UN CAS POUR L'ACTION DE SUCKÈS. La Charge Utile Contien Toute Les photos Sous Forme de Tableau. UNE FOIS QUE L'État EST MIS À JOUR, LE SÉLEUR Photo Passe les photos à la Composante de la Galerie à Afficher.
Case Load_Gallery_Success:
Action de retour.photos;
Actuelle, Les Photos Apparaissant Soudainement Après Leurrerie. Sur un Connexion plus Lente, l'utilisateur Examinera Un Écran Vide Jusqu'à la Fin de la Demande, SI Cela Le Fort Jamais. Les Actions Que Nous Envoyons Aux Photos De Chargement Égyptement Estre Prises DANS LE RÉCUCTEUR D'INTERFACE UTILISATEUR AFINE DE MONTENIR L'INTERFACE À JOUR AVEC CE QUE JE PASSE. METTRE À JOUR LES INDIQUÉS DE LA CHARGE ET D'ERREUR DANS LE REDUCTTEUR D'INTERFACE UTILISATEUR À Réducteur / UI / UI.JS .
Case LOAD_GALLERY_Error:
Retour {... Etat,
Chargement: faux, erreur: true};
CAS LOAD_GALLERY_START:
Retour {... Etat,
Chargement: vrai, erreur: faux};
CAS LOAD_GALLERY_SUCCESS:
Retour {... Etat,
Chargement: faux};
Comme les photos de la galerie Elles-Mêmes, Nous Avons Besoin de Sélecteurs Pour Obtenir Les Différentes Valeurs des étoiles d'Ui de Redux. Nous Pouvons Les Transmettre à la Galerie, Qui Rendront Ensuite des Éléments Différents Si l'ONU OU L'AUTRE Est VRAI. Nuque Sélecteurs / UI / UI.JS , Ajoter Quelques Fonctions pour Obtenir Les Valeurs.
Export const isgalleryerored =
état = & gt; state.ui.Error;
Export const isgalleryloading =
état = & gt; state.ui.loading;
Avec les Sélecteurs Prêtés, ILS autonome Ajustant Ajustés à la Galerie Conteneur Composant. Les AJOUTANT ICI SIMNIFIE QUE LE COMPOSANT RESPONSABLE DE L'AFFICHAGE DE LA GALERIE N'A PAS BESOIN DE SAVOIR Commentaire Les Donnes Sont Arrivées. SE Diriger vers vers conteneur / galerie / galerie.js et ajouter les Sélecteurs à MapstationToprops . Faits des Constantes Pour les Valeurs d'Areder à Afficher l'Étape SUIVANTE.
const {erreur, chargement,
Photos} = Ceci.Props;
[...]
Exportateur const Mapstationtoprops =
état = & gt; ({
ERREUR: ISGALLERRRANDREDRED (Etat),
Chargement: isgalleryloading (état),
});
Bien que nous NOUS AYONS L'ERREUR ET LE CHARGEMENT DES ACCESSOIRES, IL N'Y A ACTULTEMENT AUCUN INTERFACE UTILISATEUR VERRE INDIQUER QUAND ILS SON SONT Actifs. CES ACCESSOIRES SON DES VALEURS BOOLÉENNES, CE QUI SIMIFIE QUE NOUS POUVONS BASCULER L'AFFICHAGE DES COMPOSANTS QUAND ILS SON SON VRAIS. METTRE À JOUR LA MÉTHODE DE RENDU POUR VOUS ASSURATEUR QUE LA LA & lt; ERROR & GT; ET & lt; chargement et gt; Les composants roulaient au lieu de la galerie en Cas de Besoin.
Si (Erreur) {
RETOUR & LT; Erreur / & GT ;;
}
Si (chargement) {
RETOUR & LT; chargement / & gt ;;
}
AVEC LA GALERIE CHARGÉE, NOUS POUVONS PASSER À UNE Photo Individuelle. FR CLIQUANT SUR L'UNE DES DES PHOTOS ET RAFRAÎCRIR LA PAGE NE CHARGE PAS LA PHOTO DE SAUVEGARDE, CAR IL N'Y A Pas Encore sur Cette Page Versez Chargeur La Galerie. Éveillé conteneur / photo / photo.js ET CHARGER LA GALERIE DANS COMPOSANTDIDMOUNT comme le Galerie Composant. Le Photos de la Chargee Vérifiez que vous, N'ESSAREREREZ PAS DE CHARGER LES PHOTOS SI ELES ÉTAIENT DÉJÀ CHARGÉES DANS LA GALERIE.
Si (! Ça.Props.photosloaded) {
cela.props.loadGallery ();
}
L'utilisateur Peut CLIQUER sur la photo Où ILS Veilent Laufers Un commentataire. Le compositeur de photo de photo VA Courir Le addnewcommendemendance Fonction de Dépôt LORSQUE CELA SE PRODUIT. À l'Intérieur de addnewcommendemendance Fonction, Calculez Le Point où l'utilisateur a Cliqué sur la photo. LE SERVEUR NÉCESSITE UNE VALEUR DE POURCENTAGE ENTITIÈRE RONDE LORSQUESQUES EST ENREGRÉ.
Const Photo = E.Target
.getboundingClientRect ();
const top = e.clientex - photo.left;
const gauuche = e.clienty - Photo.Top;
const toppc = maths.round ((Haut /
photo.width) * 100);
const Gaucherpc = math.Round ((Gauche /
photo.height) * 100);
AVEC LA POSITION Calculée, NOUS Devons Devons Superite Dire à Redux sur Le Commentaire Afin Qui Puisse Afficher le Formulaire de commentataire. Il existe Déjà une action Configurée Pour Ajouter Le Nouveau Commentaire à l'Écran. Ajouteur addnewcommendemendance nuque MapDispatchtoprops ET Appelez-le Après AVOIR Calculé La Position du Clic.
Ceci.Props.AddNewComment (
Toppc, Gaucher);
[...]
Exportateur const de mapdispatchtoprops =
Dispatch = & GT; ({
addnewcommendement: (Haut, Gauche) = & GT;
Dépêche (addNewComment (Haut, Gauche)),
});
LORSQUES DE NOUVELLES INFORMATIONS DE COMMENTAIRE SON TENDER À RECHUX, NOUS DevONS LE DevONS LE TRANSPÉTRES DANS LE COMPOSANT DE PRÉSENTATION Photo. Cela Lui Permet de Montre Le Formulaire à la position de la Cette. Pointe le GetNewComment Sélectreur, ajustz-le à MapstationToprops et transmettre l'CEDER à & lt; photo & gt; .
Exporteur ConstToStaxoprops =
(État, accessoires) = & gt; ({
NOUVEAUCOMMENT: GetNewComment (State),
});
& lt; Photo [...] NewComment = {
cela.props.Newgment} / & gt;
En Cliquant sur la photo maintenante, Fera Apparáître Le Nouveau Formulaire de commentataire. Ceci est Son Propres Composant Connectés. Lorsque Le Formulaire Est Soumis, Il appelle Une Envoyer un commentataire Fonctionner Fonction et EST PASSÉ. C'est Un Thunk Qued Ferons. S'ouvrir CONNUTEUR / NOUVEAUCOMMENT / NOUVELCOMMENT.JS et ajouter le thunk à MapDispatchtoprops . Passeur Cela Dans Le Composant Présentant Rendu.
& lt; Nouveau commentaire [...]
Soumettre-Commentaire = {SpumitComment} / & GT;
Exportateur const de mapdispatchtoprops =
Dispatch = & GT; ({
SpumetCommente: commentataire = & gt; envoi (
Soumettre (commentataires))
});
Le Thunk à Ajouter Un nouveau commentataire UNE STRUCTURE SIMILAIRE À LA RÉCUPÉRATION DE LA GALERIE, Y COMPREND UNE ACTION DE DÉPART, DE SUCS SUCLÈS ET D'ERREUR. Il y un argument de l'ONU Supprenmentaire transmis danse Thunk - Le escarpadère Fonction. Permet Cela Un Accès Direct à l'État Actuel Afin de Saisir des Données. Créer le Envoyer un commentataire nuque Actions / NOUVEAUCOMMENT / NOUVELCOMMENT.JS . Chaque Commencer Est Associé à une photo et à un utilisateur. Pour le tutoriel, L'ID UTILISATEUR EST CODÉ DUR DANS LA utilisateur Réducteur.
Export Const SubmitComment = commentataire
= & gt; (Dispatch, GetState) = & GT; {
Expédition (SubmitCommermentStart ());
const Actuellehooid =
GetCurrentPhotoid (GetState ());
const utilisateur =
GetCurrentatuser (GetState ());
const {gauche, top} =
GetNewComment (GetState ());
};
AVEC TOUTES LES DONNÉES NÉCESSAIRES EN PLACE, NOUS POUVONS SOUMETTRE LE COMMENTAIRE. Axios un ONU Publier Méthode verser TRAITER AVEC Publier Les Demandes, AVEC Le DUXIÈME ARGUMENT ÉTANT LES DONNÉES À ENVOYER DANS CETTE Demande. Ajoutez la Demande au Thunk, en passant des Données dans l'Étui de serpent Pour le correspondre à ce que le serveur.
Renvoyer Axios
.Publier (
"http: // localhost: 3001 / commentataires", {
user_id: user.id,
photo_id: Couranthotoïïbe,
commentateur,
gauche,
Hauteur
})
Si la Promesse d'Axios Résout ou Rejet, nous devons Dree à l'application à ce sujet. S'IL EST RÉSOLU AVEC Succès, Le serveur transmettra le Contenu du commentataire. NOUS Devtions Transmettre CELA AVEC L'ACTION DE RÉUSSITE. S'IL EST REJETÉ, INCENDIZEZ UNE Action d'Erreur. METTRE À JOUR LA PROMESSE AVEC alors ET Capturer Blocs.
.chen (({Data: {
id, commentataire, gauche, top}}) = & gt;
envoi (
Soumettre des chances (
id, commentataire, gauche, Haut,
Utilisateur, ActuelPhotoïïde)
)
)
.Catch (() = & GT; Expédition (
SubmitCommermentError ()));
À L'Heure d'Heure Actuelle, UNE FOIS QUE LE COMMENTAIRE EST AJOUTE AVEC Succès, Il est Effacé de l'Écran Mais N'est Pas Visible Tant Que la page Vous Rafraîchit. NOUS POUVONS METTRE À JOUR LES PHOTOS RÉCHUCTEUR POUR OBTENIR LE NOUVECH COMMENTAIRE ET L'AJOTEUR À SON Tableau de Commentaires, à Afficher comme le ReSTE D'ENTRE EUX. Ouvrez le Réducteur / des Photos / des Photos.Js et Ajoutez Un Cas Pour Gérer L'Action. Créez UNE Copie de l'État pour vous VOUS Assurer que vous NOUS NE NE NE MUTATEZ PAS Accidentellement L'État existant.
CAS SOUMETTRE_COMMENT_SUCCESS:
const {id, commentataire, Haut, Gauche,
utilisateur, photodide} = action.payload;
const Newstate = json.parse (
JSON.Stringify (État));
Const photo = newstate.find (
photo = & gt; photo.id === photoïde);
photo.comments.push ({
Id, commentataire, gauche, haut, utilisateur
});
Retournetate de retour;
Enfin, SI UN AUTRE COMMENTAIRE EST OVERT ET QUE L'UTILISATEUR SOUHAITE AJOUHAITE AJOUTER UNNVEAU COMMENTAIRE, L'interface Utilisateur Devient Tropbrebree. NOUS DevRions Cacher La Boîte de Commentaire SI NOUVEAU COMMENTAIRE EST EN COURS DE COMPOSITION. NOUS POUVONS Accrocher à l'existant Add_new_comment action pour effacer le commentataire Évaluer. SE Diriger vers vers Réducteur / ui / ui.js ET AJOUTER UN CAS POUR CELA.
Affaire add_new_commande:
revenir {
... Etat,
COMMENTOPEN: Non Défini
};
Article CET A Été Publié à l'Origine Dans Le Numérro 283 de Creative Web Design Magazine Concepteur web . Achetez le Numéro 283 ICI or Abonnez-vous à la concepteur Web ICI .
Articles Liènes:
[DIX] [DIX] [DIX] [dix] (Crédit d'image: invision) [DIX] UNE Sélection des Meilleu..
[DIX] [DIX] [DIX] [dix] (Crédit d'image: Mark Evan Lim) [DIX] Le Storyboarding Dans..
[DIX] [DIX] [DIX] [dix] (Crédit d'image: Adobe) [DIX] Polices dans Photosh..
[DIX] [DIX] [DIX] [dix] (Crédit d'image: Future, Matt Smith) [DIX] Appommendre à s..
Page 1 sur 2: Didacticiel Krita: DU COUVERTURE VOLEUR CHEMIN AUTOUR [DIX] [dix] Didacticiel Krita: DU COUVERTURE VOLEUR CHEMIN AUTOUR ..
[DIX] [DIX] [DIX] [dix] [DIX] Savoir Redimensionnerner Une image dans Photoshop est une compétition Fond..
[dix] [dix] [dix] [dix] Quand je suis d'abord passé d'un flux de travail traditionnel à un illustra..
Apprendre à mélanger des crayons de couleur vous aidera à obtenir davantage de vos outils. Plutôt que de compter sur l'individu, la couleur plate de chaque crayon, nous pouvons les mélan..