2017-07-25 3 views
0

je simple enregistrement d'état:Getin immuable retourne nulle mais pas notSetValue

interface StateParams { 
    priceObj: PriceDTO; 
} 

const defaultState = { 
    priceObj: undefined, 
} 

class State extends Record(defaultState) implements StateParams { 
    priceObj: PriceDTO; 
} 

Par défaut, il a une valeur non définie.

Tout ce qui vient, à la suite de offerRequest est enregistré à priceObj et non transformé en immuable

(state: State, priceObj: PriceDTO) => state.set('priceObj', priceObj), 

J'ai aussi sélecteur simple:

export const getQuoteId = (state: State): string | undefined => 
    state.getIn(['offerData', 'priceObj'], {}).offerID; 

Malheureusement, il génère une erreur:

Uncaught TypeError: Cannot read property 'offerID' of null

Y a-t-il une raison particulière pour laquelle getIn ne renvoie pas la valeur notSetValue dans ce cas?

Répondre

0

L'état contient la clé priceObj que vous avez ajoutée via l'opération définie dans votre réducteur. notSetValue n'est renvoyé que lorsque la carte ne contient pas la clé. Un null explicite est une valeur valide (comme undefined), par conséquent pourquoi {} n'est pas renvoyé.

Vous devez soit vérifier priceObj != null avant mise en état ou faire votre sélection quelque chose comme:

export const getQuoteId = (state: State): string | undefined => 
    (state.getIn(['offerData', 'priceObj']) || {}).offerID; 
+0

grâce, il est tout clarifiait – Kania