2017-07-25 58 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