Pourquoi Redux de l'état des fonctions appelées réducteurs?
C'est une partie de l'officiel Redux documentation:
Il est appelé un réducteur parce que c'est le type de fonction que vous devez passer
pourArray.prototype.reduce(reducer, ?initialValue)
Il ne fait pas beaucoup de sens pour moi. Quelqu'un pourrait m'expliquer pourquoi ils sont appelés les réducteurs? Le fait de retourner une valeur par défaut (ou une valeur par défaut valeur de l'argument) ne fait pas d'eux des réducteurs à mon humble avis.
- Ils sont réducteurs, précisément parce qu'elles se comportent comme la fonction que vous passez à
reduce
, qui a accès à la valeur par défaut d'une nouvelle valeur, et vous restitue vos potentiellement transformé valeur par défaut.state -> action -> state
- une rose sous un autre nom... probablement de la commercialisation; map/reduce est un mot à la mode maintenant...
- qu';s pourquoi vous devez commencer à penser à vous-même et ne pas compter sur un cadre. Un framwork est surtout le travail d'un ou de quelques développeurs avec leur propre vision de la façon de résoudre un problème adaptés par les utilisateurs d'internet. Certains cadres ont eu raison cependant la plupart ne le font pas. un blizz d'un baiser, le même ou moins n'est pas une solution. C'est juste un exemple de beaucoup là-bas.
Vous devez vous connecter pour publier un commentaire.
Réducteurs de ne pas juste retour des valeurs par défaut. Elles retournent toujours la accumulation de l'état (basé sur toutes les précédentes et des actions en cours).
Par conséquent, ils agissent comme un réducteur de l'etat. Chaque fois qu'un redux réducteur est appelée, l'état est transmis avec l'action
(state, action)
. Cet état est alors réduit (ou cumulé) basé sur l'action, et puis l'état suivant est retourné. C'est le cycle de la classiquefold
oureduce
fonction.Comme @azium résumé avec
state -> action -> state
.Si l'on considère la série d'actions dans votre application d'être comme une liste, ou peut-être plus comme un ruisseau, il pourrait faire plus de sens.
Prendre cet exemple artificiel:
Le premier argument est une fonction de la forme
(Int, String) => Int
. Avec une valeur initiale, vous passezreduce
ce qui pourrait être appelé un "réducteur de la fonction", et vous obtenez le résultat de la transformation de la série d'éléments. Donc, vous pourriez dire, le réducteur de la fonction décrit ce qui est fait avec chaque élément individuel de changer le résultat. En d'autres termes, le réducteur de fonction prend déjà de sortie et de la valeur suivante, et il calcule la prochaine sortie.C'est analogue à ce qu'est un Redux réducteur: il prend de l'état précédent et de l'action en cours, et calculer l'état suivant.
Dans le vrai style de programmation fonctionnelle, vous pouvez conceptuellement effacer le sens appliqué aux arguments et le résultat, et de se concentrer sur la "forme" de l'entrée et de sortie.
Dans la pratique, Redux réducteurs sont généralement orthogonale, dans le sens que pour une action donnée, ils ne sont pas tous apporter des modifications à les mêmes propriétés, ce qui le rend facile de diviser leurs responsabilités et de les agréger la sortie avec
combineReducers
.Comme déjà mentionné le nom est lié à la notion de réducteur dans la programmation fonctionnelle. Vous pouvez également trouver le Merriam-Webster dictionary définition de réducteur utile:
Le réducteur consolide les actions en un seul objet représentant l'état de l'application.
Comment? Pour répondre à cette question, permettez-moi de définir un réducteur de nouveau:
Et ce n'est un redux réducteur faire?
Donc donné un
collection of actions
, le réducteur est appliqué sur chaque valeur de la collection (de gauche à droite). La première fois, il retourne lainitial value
. Maintenant, le réducteur est appliqué à nouveau sur l'état initial et la première action de retour à l'état suivant. Et le prochain élément de la collection (action) est appliqué à chaque fois sur lecurrent state
pour obtenir lenext state
jusqu'à ce qu'il atteint la fin du tableau. Et puis, vous obtenezthe final state
. C'est pas cool ça!L'auteur pense état de l'accumulateur de la fonction de réduction. Ex:
La fonction de réduction est à venir à partir de la Programmation Fonctionnelle, le nom de "réducteur" est également à venir à partir de FP.
Je n'aime pas utiliser ce nom ici. Parce que je ne vois pas le monde comme une valeur unique résultat après les actions. L'état est ici objet. Par exemple:
Ce Réducteur réduit à rien du tout. Et je n'ai pas de soins de réduire quoi que ce soit ou pas. En le nommant comme Transducteur aura plus de sens.
Nous savons où les Réducteurs sont à venir à partir de (programmation fonctionnelle), et pourquoi ils peuvent être considérés comme faisant de la réduction de travail (réduction de l'apport en azote, éléments pour une seule valeur de retour - qui est exactement ce que les fonctions normales sont supposted faire).
Cependant: Le nom est juste un nom, comme la rose est le nom d'une rose. Ne pense pas trop. Redux progammers sont les gens, ils sont enfermés dans leur contexte et là il fait sens. Le reste d'entre nous ont à accepter l'inventeur du droit d'appeler un chien bleu jaune chat 😉
Ils ne devraient pas être appelée de réduire de réduire les moyens de faire le moins de, ces fonctions le plus souvent faire plus. et puis le retourner
Je n'arrive pas à voir comment un Redux réducteur directement mappée à la fonction que vous utilisez avec
reduce
, voici donc quelques exemples pour voir comment ils correspondent.D'abord un standard réducteur (appelé "accumulateur" dans MDN) fonction de la MDN Tableau.réduire documentation et puis un exemple simplifié de Dan Abramov est
Counter.js
à la fin de sa "Vous ne pourriez pas besoin Redux' post de blog.sum
ajoute une valeur à l'accumulateurreducer
ajoute/soustrait une valeur à/de l'accumulateur.Dans les deux cas, ici, de l '"état" est juste un entier.
Vous êtes à 'accumuler' les actions en l'état. C'est aussi l'immuable moyen de modifier un objet JavaScript.
JS:
D'autres réponses bien expliquer pourquoi il est nommé comme il est, mais nous allons essayer de nommage plus de choses...
D'abord,
reduce
pourrait être appeléuse anOperator with every action name and accumulated state, starting with origState
. En smalltalk, il est appeléactions inject: origState into: anOperator
.Mais que faites-vous injecter de l'opérateur? Le origState ET les noms d'action. Ainsi, même en Smalltalk noms de méthode ne sont pas très claires.
actionOperators[increment]
est un Réducteur, mais je préfère l'appeler et actionOperator parce qu'il est mis en œuvre pour chaque action. L'état est juste un argument (et un autre en tant que valeur de retour).Réducteur est cependant un meilleur mot pour être au top des résultats de recherche google. C'est également semblable à Redux.
Comment nous l'appelons Deducer à partir de maintenant. Il en déduit que le nouvel état en fonction de l'état précédent et l'action entrante.
Dans ce code ci-dessous, vous avez juste besoin de penser de l'accumulateur, comme les actions et currentValue comme un état dans redux contexte. avec cet exemple, vous trouverez les raisons de leur nom comme un réducteur de trop.
La réduire() la méthode exécute un réducteur de fonction (que vous fournissez) sur
chaque élément du tableau, résultant en une seule valeur de sortie.