我正在使用Axios,Redux和Redux Promise Middleware。
我有以下动作创建者:
return {
type: 'FETCH_USERS',
payload: axios.get('http://localhost:8080/users',
{
params: {
page
}
}
)
}
在我的FETCH_USERS_PENDING
操作的还原器中,我想将请求的URL保存在我的状态。我该怎么做?
您要使用 redux-promise-middleware的" meta"变量。喜欢:
return {
type: 'FETCH_USERS',
meta: { url: 'http://localhost:8080/users' },
payload: axios.get('http://localhost:8080/users', config)
}
您可以在参数中通过它,但是在获取页面之前,这不会返回。这意味着它不会在fetch_users_pending期间传递。
,我很确定您是否将您直接包含在返回对象中(例如Lucas建议的方式),它将被剥离出fetch_users_pending阶段。
这是Redux-Promise-Middleware的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 } : {})
});
您在此阶段可以看到,中间件返回附加的"类型"属性,并检查" data"&"元"属性。如果存在,它们将在动作中传递。
如果要进一步研究,这是Redux-Promise-Middle Warear源代码。
也只需通过操作中的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;
});