Я начал использовать 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 ничего не будет делать, если пользователь уже не находится на этом шаге.