规范化reducer中的响应得到类型错误

时间:2017-09-02 01:39:19

标签: javascript reactjs redux

我使用redux并且无法使用地图将我的UTC日期转换为适当的格式。

const adsReducer = (state = initalState, action) => {

  switch (action.type) {
    case 'FETCH_ADS_PENDING':
      return { ...state, loading: true }
    case 'FETCH_ADS_FULFILLED':
      return { 
        ...state, 
        loading: false, 
        data: ((action.payload || {}).data || {}).map(o => ({...o, created_at: moment(o.created_at).format('DD-MM-YYYY')})),
      }
   }
}

如果我只是返回action.payload.data那么它会没问题,但我想将日期解析为正确的格式,上面的代码会导致这样的错误

Uncaught (in promise) TypeError: ((action.payload || (intermediate value)).data || (intermediate value)).map is not a function

任何线索是什么?

2 个答案:

答案 0 :(得分:0)

问题是,如果未定义action.payload或未定义action.payload.data,您正尝试映射对象

假设action.payload.data是一个数组,您可以执行以下操作:

action.payload && 
    action.payload.data && 
        action.payload.data.map(o => (
           {...o, created_at: moment(o.created_at)
                              .format('DD-MM-YYYY')
            }
        )),

答案 1 :(得分:0)

Array#map仅适用于阵列..

使用默认值Functor g代替[]

{}