2017-09-02 42 views
2

我使用了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 

任何线索错误怎么了?

回答

0

Array#map仅在阵列上可用。

使用默认值为[]而不是{}

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

的问题是,你试图映射了一个对象,如果没有定义action.payloadaction.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') 
      } 
     )), 
+0

我使用'(action.payload || {})'和使用'&&'不一样吗?在这种情况下, –

+0

应该是'((action.payload || {})。data || [])' –