如何在史诗 redux-observable 的 componentDidMount 方法中设置数据状态
How to set state the data in componentDidMount method from the epic redux-observable
我是 redux-observable 的新手。我有一个史诗函数,它请求 api 调用并发出新的成功操作。在我的反应视图中获取数据的干净方法是什么?在我的 componentDidmount 方法中,我调用了 getUsers redux 操作。我想在 componentDidmount 中设置状态,但它只会 运行 一次并且不会等待承诺史诗。
const getUsersEpic = action$ =>
action$.ofType(GET_USERS)
.mergeMap( action =>
Observable.fromPromise(
axios({
method: 'get',
url: API_USERS,
headers : getHeaders().toObject()
})
)
)
.flatMap((response) => {
if(response.status == 200) {
return [{
type: GET_USERS_SUCCESS,
data: response.data,
status: response.status
}]
}
else {
return [{
type: GET_USERS_ERROR,
message: 'error',
status: response.status
}]
}
})
.catch( error => {
// console.log('error', error)
return setResponseError(error, GET_USERS_ERROR);
});
您在 componentDidMount()
中调度了一个被 redux-observable
拦截并用于进行 ajax 调用的操作。结果,您会在将来的某个时间点将 GET_USERS_SUCCESS
或 GET_USERS_ERROR
操作分派给 redux。通常,没有办法在组件中等待这些操作。我认为这是一个很好的限制,因为这限制了组件中的异步处理,这在很多方面都会引入错误。
您需要做的是在 reducer 中设置默认状态,稍后由请求响应更新并将其作为 props 传递给您的组件。
此外, 作者之一 redux-observable。
顺便说一句,你有什么理由改用 Axios AjaxObservable
我是 redux-observable 的新手。我有一个史诗函数,它请求 api 调用并发出新的成功操作。在我的反应视图中获取数据的干净方法是什么?在我的 componentDidmount 方法中,我调用了 getUsers redux 操作。我想在 componentDidmount 中设置状态,但它只会 运行 一次并且不会等待承诺史诗。
const getUsersEpic = action$ =>
action$.ofType(GET_USERS)
.mergeMap( action =>
Observable.fromPromise(
axios({
method: 'get',
url: API_USERS,
headers : getHeaders().toObject()
})
)
)
.flatMap((response) => {
if(response.status == 200) {
return [{
type: GET_USERS_SUCCESS,
data: response.data,
status: response.status
}]
}
else {
return [{
type: GET_USERS_ERROR,
message: 'error',
status: response.status
}]
}
})
.catch( error => {
// console.log('error', error)
return setResponseError(error, GET_USERS_ERROR);
});
您在 componentDidMount()
中调度了一个被 redux-observable
拦截并用于进行 ajax 调用的操作。结果,您会在将来的某个时间点将 GET_USERS_SUCCESS
或 GET_USERS_ERROR
操作分派给 redux。通常,没有办法在组件中等待这些操作。我认为这是一个很好的限制,因为这限制了组件中的异步处理,这在很多方面都会引入错误。
您需要做的是在 reducer 中设置默认状态,稍后由请求响应更新并将其作为 props 传递给您的组件。
此外,
顺便说一句,你有什么理由改用 Axios AjaxObservable