2017-02-20 4 views
0

Je suis conscient d'utiliser des sélecteurs dans Redux, et de les utiliser. Cependant, j'ai un cas où je pense qu'il serait plus logique de stocker mes données nouvellement filtrées dans le magasin. Voici mon exemple:Redux: Est-ce toujours une mauvaise pratique de conserver les données dérivées dans le magasin?

J'ai une application qui affiche beaucoup d'éléments. Il y a une option "filtre global" qui montrera seulement un certain sous-ensemble de ces éléments.

Le fait est que ce filtre est global. Il modifie cette liste d'éléments sur plusieurs pages et composants (par exemple dans un tableau, dans un menu déroulant). Lorsque le filtre est défini, pour l'ensemble de l'application, le sous-ensemble actuel est la seule liste d'éléments qui existe.

Je pourrais utiliser des sélecteurs partout, mais il me semble qu'il serait plus robuste d'avoir juste une partie 'filteredItems' de mon magasin. Quel serait le désavantage de faire cela?

+0

Il n'y a pas de concepts en redux appelés sélecteurs. Voulez-vous dire réducteurs? Deuxièmement, «il serait plus logique de stocker mes données nouvellement filtrées dans le magasin» est confus à lire. Pourriez-vous juste rendre votre message un peu plus clair et précis? –

+0

C'est ce dont je parle: http://redux.js.org/docs/recipes/ComputingDerivedData.html Si vous connaissez ces concepts, je ne pense pas que ma question soit difficile à comprendre. – AlexKempton

+0

Je n'utiliserais pas de sélecteurs du tout. Cela rendrait très difficile de changer votre code plus tard. Je voudrais absolument stocker les données filtrées dans le magasin (et voici comment je le fais). Vous pouvez le faire en appelant les actions de filtrage sur votre magasin. –

Répondre

2

Il est à vous de décider quel état vous avez dans votre application, et où il doit vivre. Oui, le conseil commun est d'essayer de garder l'état minimal du magasin et d'utiliser des sélecteurs pour en déduire des valeurs étendues, mais il n'y a rien de mal à utiliser des réducteurs pour créer des valeurs filtrées conservées dans l'état. Votre situation semble être un cas d'utilisation parfaitement raisonnable pour cela.

1

J'utilise des sélecteurs (reselect) qui vont plus loin en mettant en cache des données dérivées et d'autres choses pour améliorer les performances, je les utilise tout le temps.

Pourquoi? Pour garder mes composants aussi petits et réutilisables que possible, j'ai remarqué qu'après avoir fait cela pendant un certain temps, vous commencez à écrire vos composants de manière plus «générique», et vous utilisez les sélecteurs comme type d'adaptateurs pour former plusieurs types de données à intégrer dans un composant.

Quand?

L'un des principaux problèmes lors de l'utilisation de reselect, est la partie setup, ennuyeuse ... et non sans efforts. Mais quand vous apprendrez et appliquerez le motif de resélection, il deviendra beaucoup plus simple de lire et de maintenir une grosse application

Donc, si vous avez beaucoup d'informatique à faire et des données dérivées diversifiées, vous devriez en payer le prix (temps, efforts) et configurez cela, mais si vos données dérivées sont petites, vous ne devriez pas vous en préoccuper.

Mes deux cents

+0

Oui, les sélecteurs sont super et je les utilise dans certaines parties de cette application. Mon sentiment est que, comme le filtrage se passe globalement, pour les données utilisées dans l'ensemble de l'application, il semble que l'utilisation de sélecteurs ne convient pas. Pouvez-vous voir mon dilemme? – AlexKempton

+1

peut-être que votre filtrage devrait être côté serveur alors – redconservatory

+0

redconservatory est correct, si cela est global, vous devriez filtrer vos données avec l'API et ensuite calculer, ce sera beaucoup plus propre et plus efficace – Sam