2017-07-25 20 views
0

我有一個簡單的狀態記錄:不變getIn返回空但不notSetValue

interface StateParams { 
    priceObj: PriceDTO; 
} 

const defaultState = { 
    priceObj: undefined, 
} 

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

默認情況下它是未定義值。

無論發生什麼事,作爲offerRequest的結果保存到priceObj並沒有轉化爲不可變的

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

我也有簡單的選擇:

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

不幸的是,它拋出一個錯誤:

Uncaught TypeError: Cannot read property 'offerID' of null

是否有任何特殊原因,爲什麼getIn在這種情況下不返回notSetValue值?

回答

0

該狀態包含鍵priceObj,通過您在縮減器中的設置操作添加它。僅當地圖不包含密鑰時纔會返回notSetValue。明確的null是有效值(因爲是undefined),因此爲什麼{}未被返回。

您應該在狀態設置前檢查priceObj != null或讓你的選擇是這樣的:

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

感謝,這是所有的澄清 – Kania