我已经阅读了Accessing the state from within a redux-observable epic,但这对我寻找答案没有帮助。
我在我的react-redux应用程序中使用redux-observable,我有一个史诗将触发API调用,代码如下:
const streamEpicGet = (action$: Observable<Action>, state$) => action$
.pipe(
ofType(streamActions.STREAM_ITEM_GET),
withLatestFrom(state$),
mergeMap(([action, state]) => {
return observableRequest(
{
failureObservable: error => {
const actions = []
return actions
},
settings: {
body: queryParams, // I can access to the state data here to organize the query params I need for calling the API
url: '/path/to/api',
},
successObservable: result => {
const { pushQueue } = state
// here I want to access to the latest state data after API response
}
})
}),
)
在上面的代码中,我使用withLatestFrom(state$)
,因此我可以在执行mergeMap
操作员代码时访问最新数据,也就是说,我可以在此处访问状态数据来组织查询API的参数。
但是,在API请求发出之后和响应之前的这段时间内,还有其他动作在发生,它们正在更改状态pushQueue
,因此在API响应之后,我想读取最新状态{{ 1}}在我的pushQueue
回调中。
我的问题是,我总是获得与准备查询参数时相同的状态数据,即:在successObservable
回调中API响应后,我无法获取最新的状态数据。
谢谢,让我知道您是否需要更多信息。
答案 0 :(得分:0)
const streamEpicGet = (action$: Observable<Action>, state$) => action$
.pipe(
ofType(streamActions.STREAM_ITEM_GET),
withLatestFrom(state$),
mergeMap(([action, state]) => {
return observableRequest(
{
failureObservable: error => {
const actions = []
return actions
},
settings: {
body: queryParams, // I can access to the state data here to organize the query params I need for calling the API
url: '/path/to/api',
},
successObservable: result => {
const { pushQueue } = state$.value // Use state$.value to always access to the latest state
// here I want to access to the latest state data after API response
}
})
}),
)
所以答案是使用state$.value
。
我通过阅读redux-observable Migration document
中的Accessing状态来获得此信息