immutable getIn返回null但不是notSetValue

时间:2017-07-25 06:27:27

标签: javascript redux immutable.js

我有一个简单的州记录:

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值?

1 个答案:

答案 0 :(得分:0)

当您通过reducer中的set操作添加键时,状态包含键priceObj。只有在地图不包含密钥时才会返回notSetValue。显式null是有效值(与undefined一样),因此未返回{}的原因。

您应该在设置状态之前检查priceObj != null,或者使选择器像:

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