我有一个简单的州记录:
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 :(得分:0)
当您通过reducer中的set操作添加键时,状态包含键priceObj
。只有在地图不包含密钥时才会返回notSetValue
。显式null
是有效值(与undefined
一样),因此未返回{}
的原因。
您应该在设置状态之前检查priceObj != null
,或者使选择器像:
export const getQuoteId = (state: State): string | undefined =>
(state.getIn(['offerData', 'priceObj']) || {}).offerID;