Восстановление саги после перезагрузки - PullRequest
0 голосов
/ 17 января 2019

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

...