我正在使用Axios,Redux和Redux Promise Middleware。
我有以下动作创建者:
return {
type: 'FETCH_USERS',
payload: axios.get('http://localhost:8080/users',
{
params: {
page
}
}
)
}
在我的FETCH_USERS_PENDING
动作的reducer中,我想在我的状态中保存请求的URL。我怎么能这样做?
答案 0 :(得分:12)
您想要使用 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 } : {})
});
正如您在此阶段所看到的,中间件返回附加的"类型"属性并检查"数据" &安培; "元"属性。如果存在,它们将在动作中传递。
如果你想进一步研究它,请redux-promise-middleware source code。
答案 1 :(得分:0)
只需在动作中传递URL:
return {
type: 'FETCH_USERS',
url: 'http://localhost:8080/users',
payload: axios.get('http://localhost:8080/users', {
params: {
page
}
}
}
并使用action.url
在reducer中访问它。或者您可以保留原样,并在承诺解析中访问它:
action.payload.then(function(response) {
var url = response.config.url;
});