0
votes

ARCHITECTURE REDUX POUR REUSSABILITÉ MEMO-COMPOSANTS

TLDR:

Une application a N Nombre de Composants, et on souhaite refléter chacun de l'état des compteurs dans l'application REDUX Store.


Un certain contexte:

Par souci de ce contexte, chaque compteur représente le temps qu'un joueur a pris pour jouer à son tour dans un jeu avec un nombre dynamique de joueurs.

Il est nécessaire également, lors de la modification d'un tour d'un joueur, mettez en pause tous les horaires des autres joueurs, et lorsque vous redémarrez le jeu, tous les minuteries devrait être redémarré à leur état initial ( 0ms ).


(J'utilise le Ducks modèle de conception pour mon redux code)

Timer.Reducer.js Xxx

index.js (réducteur principal) xxx

initialement, j'ai enveloppé la minuterie réducteur (ci-dessus) Une fonction qui renvoie un réducteur de minuterie "instance" (pas une instance réelle) et encapsule toute la chose "canard" dans son propre contexte. L'utilisation de cette pensée est affichée dans le fichier index.js ( Timer1 & Timer2 ).

Ceci n'est pas 't très robuste parce que cela me demande de savoir à l'avance combien de compteurs doivent être créés et de les coder de manière rigide dans le réducteur principal.

Comment un tel scénario doit-il être conçu pour réagir -Redux architecture?


2 commentaires

Je pense que le réducteur doit contenir chronométrage . Et chaque composant peut filtrer chronométrage de la collection de Redux State par un identifiant unique. Dans ce cas, vous n'aurez qu'un minuterie réducteur avec toutes les données à l'intérieur.


@Vladimirsykh - À l'origine, c'est exactement ce que j'ai fait. Un réducteur Counter et sa valeur était un tableau (article par utilisateur), mais je n'ai pas aimé cette idée d'avoir un réducteur étant conscient qu'il y a plusieurs joueurs. Je préfère que le compteur soit autonome afin que je puisse la réutiliser aussi dans d'autres projets


3 Réponses :


0
votes

Sebastien Lorber a soulevé cette question peu après la sortie de Redux. Il a finalement créé un repo, SLORBER / SCIPABLE-FRONTEND-AVEC-ELM- Or-Redux , qui collecte des exemples de solutions soumis par l'utilisateur à ce type de problème écrit avec différentes implémentations.

Il n'y a pas de réponse unique à cette question, mais je vous encourage à regarder ce repo pour des idées.


0 commentaires

0
votes

Ceci est quelque peu similaire à la question de la "application TODO" dans les exemples Redux. ( https://github.com/reduxjs/redux/tree/master/examples / todos ). Je suggérerais que vous gardiez un seul réducteur responsable de la minuterie et du joueur actif au lieu d'un par joueur, car la fonction réducteur sera la même pour toutes. Lorsque le joueur expédie l'action indiquant de mettre à jour son compteur, il doit également spécifier dans l'action qu'est-ce que l'ID du joueur et vous pouvez vérifier si le lecteur actif correspond à l'ID du lecteur expédiant l'action, puis mettez à jour cet identifiant dans l'état. , sinon ignorez-le. Votre état serait quelque chose comme ceci: xxx

(ou utilisez l'index de tableau au lieu d'une valeur de clé si vous préférez) Et votre action serait quelque chose comme: xxx

et votre réducteur: xxx

et enfin, si vous avez besoin de mapper Votre état à des accessoires, ce qui vient de prendre du compte en utilisant l'identifiant de ce joueur. Le réducteur peut probablement être écrit mieux, mais j'espère que vous obtenez l'idée.


0 commentaires

0
votes

Vous auriez besoin d'une sorte de réducteur à clé, comme: xxx

Votre réducteur de minuterie serait maintenu isolé.


0 commentaires