我开始在我的React应用中使用redux-saga。
redux-saga网站上的一个很好的例子是它们向您展示如何在应用程序中创建漂亮的流。我已经做了类似的事情,但是我的问题是,如果用户重新加载整个页面,应该如何处理?
export default function* searchEnemyWatcher() {
yield fork(search);
}
function* search() {
while (true) {
yield take("START_SEARCH");
// notify backend
const { autoClose } = yield race({
autoClose: call(delay, 3000),
userClose: take("HIDE_MODAL")
});
if (autoClose) {
yield put(closeNotification());
}
const { stop, found } = yield race({
stop: take("STOP_SEARCH"),
found: take("ENEMY_FOUND")
});
if (stop) {
//user can start to search again
continue;
}
if (found) yield put(notify("ENEMY_FOUND"));
const { decline, accept, timeout } = yield race({
decline: take("DECLINE_ENEMY"),
accept: take("ACCEPT_ENEMY"),
timeout: call(delay, 20000)
});
if (accept) {
...
} else if (decline) {
...
} else if (timeout) {
...
}
// notify the backend
}
}
这是我要解决的传奇的一部分。如果我只是单击它,它会完美运行。在这之间,可以保存一些状态更改。但是,即使我重新加载页面并设置了SEARCHING: true
,search
的传奇故事也会等待“ START_SEARCH”。
我当时正在考虑将传奇内容拆散,以便用户可以“重新加入”流程,但是使用此设置,很显然,除非用户已经在该步骤上,否则ENEMY_FOUND不会执行任何操作。 / p>