FireMonkey92 Ответов: 1

Очистка состояния redux при закрытии вкладки браузера


Привет, я работаю над проектом react. Мое требование состоит в том, чтобы очистить redux store, когда когда-либо использование закрывает браузер. (Не при обновлении страницы.)

я провел некоторое исследование по этому вопросу и нашел о событиях EventListner "beforeunload".
Вот что я попробовал.

_реквизит.ActionSessionClear() : очищает мое состояние redux.
Все вещи работают нормально, но это очищает мое состояние redux, когда я когда-либо обновляю страницу.
И еще одна проблема заключается в том, что когда я пытаюсь закрыть вкладку(chrome), она предлагает мне покинуть страницу? и даже если я нажму на кнопку Отмена, это очистит мое состояние Redux.
В IE он ведет себя по-другому.

Мое требование-это просто, чтобы очистить государство, говорится в статье. мне не нужно никакого сообщения перед закрытием вкладки или обновлением вкладки. Я не хочу очищать состояние при обновлении страницы.


Есть ли другой подход, чтобы сделать то же самое??
Я был бы признателен за быстрое предложение. Спасибо!!!

Что я уже пробовал:

componentDidMount() {
    window.addEventListener("beforeunload", this.callEvent);
 }


componentWillUnmount() {
      window.removeEventListener("beforeunload", this.callEvent);
    }

callEvent = e => {
    const _props = this.props;
    e.preventDefault();
    _props.ActionSessionClear();
    localStorage.removeItem("HASTOKEN");
    _props.ActionRouteNavigate(ROUTES.LOGIN);
    var confirmationMessage = "o/";
    (e || window.event).returnValue = confirmationMessage; //Gecko + IE
    return confirmationMessage; //Webkit, Safari, Chrome
  };

ZurdoDev

Нет, я никогда не видел решения, которое работает во всех случаях. Beforeunload-это единственный вариант, с которым я знаком.

1 Ответов

Рейтинг:
9

Richard Deeming

Если вы возвращаете значение из beforeunload в этом случае браузер отобразит пользователю подтверждающее сообщение с вопросом, хочет ли он покинуть страницу.

К тому времени, когда пользователь нажимает кнопку "Отмена", ваш код уже запущен, и ваше состояние очищено.

Вы могли бы использовать unload вместо этого происходит событие, которое срабатывает непосредственно перед выгрузкой страницы. Однако, нет никакого способа узнать, почему происходит эта выгрузка - пользователь может закрыть вкладку, перейти на другой сайт, перейти на другую страницу на том же сайте или перезагрузить страницу.

Если вам просто нужно хранилище, которое будет очищено, когда пользователь закроет вкладку, вы можете использовать sessionStorage вместо localStorage.

Окно: событие beforeunload - Web APIs | MDN[^]
Окно: выгрузка события - веб-API | MDN[^]
Window.sessionStorage - веб-API | MDN[^]