我有一些在应用程序启动时从服务器加载的初始数据。
加载然后触发InitialDataLoaded
之类的动作。
此数据将保存到某个州,并用于将来与服务器的所有通信。
当应用加载该数据时,takeEvery(action)
可以发送其他一些请求。如果暂时没有初始数据,我无法发送这些请求,因为它们没有初始数据就没有意义。
如何确保所有相关操作仅在触发所需操作时才会引发请求?
答案 0 :(得分:1)
我不确定是否可以发送给takeEvery的其他请求是由UI启动的(在这种情况下,如果加载了初始数据,你可以通过检查一些prop来禁用UI)。
但是如果你在saga中讨论,你可以等待这样的InitialDataLoaded动作:
function* watchAppInit() {
while (true) {
// when this completes it dispatches the InitialDataLoaded action
yield fork(loadInitialData);
yield take(actionTypes.InitialDataLoaded);
// this won't execute until InitialDataLoaded action is dispatched
yield fork(doOtherStuff);
}
}
或者您可以检查其他操作中的状态:
function* watchDoOtherStuff() {
while (true) {
const action = yield take(actionTypes.DO_OTHER_STUFF);
// check the state to see if you have initial data
const initialized = yield select(selectors.getInitialDataLoaded);
if (initialized) {
yield fork(doIt);
}
}
}