2017-09-02 34 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 || [])' –

相關問題