2017-07-27 2 views
0

Je trouve mon chemin autour de l'échosystème Redux, et je suis tombé sur la sutuation suivante: Supposons que j'ai un composant React qui doit être connecté à un redux partie d'état utilisant un sélecteur, mais cette partie n'existe pas encore (indéfini). Donc, lors de l'exécution, je reçois une erreur "get on undefined". Est-il possible de définir et de connecter le sélecteur au composant, même si la partie d'état n'existe pas encore?Comment puis-je créer un sélecteur de redux pour un état qui n'existe pas encore?

J'utilise resélectionner pour créer le sélecteur, c'est une solution que je l'ai utilisé pour éviter de jeter l'erreur:

import { createSelector } from 'reselect'; 

const selectLogin = (state) => state 

const loginDataSelector =() => createSelector(
    selectLogin, 
    (authState) => authState.get("auth")? 
    authState.get("auth").get('loginData'):undefined 
); 

export { 
    loginDataSelector 
}; 

De cette manière, le sélecteur selectLogin semble surveiller l'ensemble de l'arborescence de l'État. Existe-t-il une meilleure façon de procéder, ou existe-t-il une meilleure pratique pour les sélecteurs avec une partie d'état non définie (= non encore définie)?

+1

si vous définissez cette pièce d'état à une valeur par défaut au départ? –

+0

Cela signifie que je devrais utiliser un réducteur pour cette partie d'état, non? Cela me semble un peu trop, puisque j'ai seulement besoin de lire la partie d'état, et ne pas l'écrire (à partir de ce composant). En outre, il existe un réducteur pour cette partie d'état dans un autre composant, il n'a tout simplement pas encore été appelé. Une question connexe qui se pose est s'il y a un moyen de connecter un composant déjà existant à une partie d'état APRÈS qu'il a été initialisé/rendu, etc. Cela éviterait le problème de "l'état non existant". –

Répondre

1

Vous pouvez utiliser les valeurs par défaut ES6 pour contourner ce problème.

également pas l'utilisation de getIn qui vous permet d'accéder en toute sécurité des propriétés profondes

import { createSelector } from 'reselect'; 
import { Map } from 'immutable'; 

const selectLogin = (state) => state 

const loginDataSelector = createSelector(
    selectLogin, 
    (authState = Map()) => authState.getIn(["auth", "loginData"]) 
);