2017-02-22 41 views
2

我正在使用axios,redux和redux-promise-middleware。將數據添加到掛起的有效負載

我有以下行爲者:

return { 
     type: 'FETCH_USERS', 
     payload: axios.get('http://localhost:8080/users', 
      { 
       params: { 
        page 
       } 
      } 
     ) 
    } 

在我減速的FETCH_USERS_PENDING行動,我想保存請求的URL我的狀態。我怎樣才能做到這一點?

回答

1

簡單地將URL中的作用,以及:

return { 
    type: 'FETCH_USERS', 
    url: 'http://localhost:8080/users', 
    payload: axios.get('http://localhost:8080/users', { 
    params: { 
     page 
    } 
    } 
} 

和訪問它與action.url減速。或者你可以離開這個動作,因爲它是,並且訪問它的承諾分辨率:

action.payload.then(function(response) { 
    var url = response.config.url; 
}); 
+0

在動作的頂層添加任意鍵使其不符合[符合FSA標準](https://github.com/acdlite/flux-standard-action)。 @James Rutledge的回答正確地建議將url置於'meta'鍵之下。 –

7

你想用終極版,承諾中間件的「元」變量。像這樣:

return { 
    type: 'FETCH_USERS', 
    meta: { url: 'http://localhost:8080/users' }, 
    payload: axios.get('http://localhost:8080/users', config) 
} 

你可以在你的params中傳遞它,但是直到頁面被提取才會被返回。這意味着它不會在FETCH_USERS_PENDING期間傳回。

而且我很確定你是否直接包含在返回對象中(比如Lucas建議的),它將被剝離出FETCH_USERS_PENDING階段。

下面是終極版,承諾中間件的FETCH_USERS_PENDING階段:

/** 
    * First, dispatch the pending action. This flux standard action object 
    * describes the pending state of a promise and will include any data 
    * (for optimistic updates) and/or meta from the original action. 
    */ 
    next({ 
    type: `${type}_${PENDING}`, 
    ...(data !== undefined ? { payload: data } : {}), 
    ...(meta !== undefined ? { meta } : {}) 
    }); 

正如你可以在這個階段看,中間件返回附加的「類型」屬性,並檢查「數據」 &「元」屬性。如果存在,他們會在行動中傳遞。

這是redux-promise-middleware source code如果你想進一步研究它。