Реагировать | Как определить обновление страницы (F5)

Я использую Реагировать на js. Мне нужно обнаружить page refresh. Когда пользователь нажимает значок обновления или нажимает F5, мне нужно узнать событие.

Я пробовал с сообщение stackoverflow, используя функции javascript

Я использовал функцию javascript beforeunload, все равно не повезло.

onUnload(event) { 
  alert('page Refreshed')
}

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

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

вот у меня полный код на stackblitz

Почему бы просто не проверить e.keyCode === 116, который является клавишей F5? Вот пример того, как это сделать: stackoverflow.com/a/34634290/2127769

Ralph David Abernathy 25.04.2018 17:56

Может быть два сценария: нажмите кнопку обновления браузера и нажмите F5.

Maria Jeysingh Anbu 25.04.2018 17:58

Ваш код отлично работает

bryan 25.05.2019 22:32
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
31
3
53 357
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Кажется, ваш код работает нормально, ваше предупреждение не будет работать, потому что вы не останавливаете обновление. Если у вас console.info('hello'), вывод будет показан.

ОБНОВИТЬ ---

Это должно остановить обновление пользователя, но это зависит от того, что вы хотите.

componentDidMount() {
    window.onbeforeunload = function() {
        this.onUnload();
        return "";
    }.bind(this);
}

Могу ли я вызвать любую функцию в этой функции onUnload? becoz пробовал вроде не работает.

Maria Jeysingh Anbu 25.04.2018 17:42

Вам нужно предложить пользователю что-нибудь, что остановит обновление. Какую функцию вы пытаетесь разместить внутри onUnload? Я дополню свой ответ примером.

Will 25.04.2018 17:47

Только при обновлении страницы я должен вызывать такую ​​функцию, как эта this.props.actions.loaddata()

Maria Jeysingh Anbu 25.04.2018 17:50

Спасибо. Я думаю, он был вызван перед загрузкой страницы. Мне нужно после того, как пользователь обновит страницу

Maria Jeysingh Anbu 25.04.2018 17:56

Кажется, у Абделлатифа есть лучшее решение, чем у меня.

Will 25.04.2018 18:11
Ответ принят как подходящий

Поместите это в конструктор:

if (window.performance) {
  if (performance.navigation.type == 1) {
    alert( "This page is reloaded" );
  } else {
    alert( "This page is not reloaded");
  }
}

Это будет работать, посмотрите этот пример на stackblitz.

Но есть проблема. Он срабатывает даже при смене страницы. не только обновление страницы. Мне нужно только обновить страницу

Maria Jeysingh Anbu 25.04.2018 18:22

Просто измените содержание условий

Abdellatif Derbel 25.04.2018 18:26

Я использую реактивный маршрутизатор. когда я переключаю меню, срабатывает

Maria Jeysingh Anbu 25.04.2018 18:28

Пожалуйста, просмотрите текст предупреждения, если страница обновляется, будет срабатывать предупреждение «Эта страница перезагружена», иначе будет срабатывать другое предупреждение «Эта страница не перезагружена». Таким образом, вы можете использовать только первое условие

Abdellatif Derbel 25.04.2018 19:56

@MariaJeysinghAnbu говорит, что он запускает предупреждение об обновлении, даже если маршрут изменился в IE. В IE, даже если пользователь меняет маршрут, его значения равны 1, но в Chrome он работает по-другому

CyberAbhay 08.03.2019 09:47

будет ли это работать, если пользователь нажимает кнопку обновления вместо F5?

Deekshith Bucky 07.04.2020 02:16

Как сделать что-то ПОСЛЕ завершения обновления?

shan 08.04.2020 22:27

К сожалению, принятый в настоящее время ответ не может считаться приемлемым, поскольку performance.navigation.type - устарел

Новейший API для этого - экспериментальный банкомат. В качестве обходного пути я могу предложить только сохранить некоторое значение в хранилище redux (или что-то еще, что вы используете), чтобы указать состояние после перезагрузки, и при первом изменении маршрута обновите его, чтобы указать, что маршрут был изменен не из-за обновления.

Если вы используете REDUX или CONTEXT API, это довольно просто. Вы можете проверить переменные состояния REDUX или CONTEXT. Когда пользователь обновляет страницу, он сбрасывает состояние CONTEXT или REDUX, и вам нужно снова установить их вручную. Поэтому, если они не установлены или равны начальному значению, которое вы указали, вы можете предположить, что страница обновляется.

Первоначально я нашел этот подход полезным, но затем я обнаружил, что он создал для меня ошибку, поэтому теперь я сохраняю строковое свойство с именем currentPage в одном из моих редукторов redux из моего componentDidMount, но проверяю его значение перед его установкой, чтобы предыдущая страница была другой страницей, а не просто перезагрузкой. Время покажет, хороший это подход или нет

Joseph Beuys' Mum 25.09.2020 11:17

Если вы используете React Hook, UseEffect, вы можете внести следующие изменения в свой компонент. Это сработало для меня

useEffect(() => {
    window.addEventListener("beforeunload", alertUser);
    return () => {
      window.removeEventListener("beforeunload", alertUser);
    };
  }, []);
  const alertUser = (e) => {
    e.preventDefault();
    e.returnValue = "";
  };

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

Функциональный компонент

useEffect(() => {
    window.onbeforeunload = function() {
        return true;
    };

    return () => {
        window.onbeforeunload = null;
    };
}, []);

Компонент класса

componentDidMount(){
    window.onbeforeunload = function() {
        return true;
    };
}

componentDidUnmount(){
    window.onbeforeunload = null;
}

Вы можете поставить проверку только для добавления предупреждения, если условие - true.

Функциональный компонент

useEffect(() => {
    if (condition) {
        window.onbeforeunload = function() {
            return true;
        };
    }

    return () => {
        window.onbeforeunload = null;
    };
}, [condition]);

Компонент класса

componentDidMount(){
    if (condition) {
        window.onbeforeunload = function() {
            return true;
        };
    }
}

componentDidUnmount(){
    window.onbeforeunload = null;
}

Как я могу использовать этот код в компоненте класса react.js?

Mayur Vaghasiya 10.03.2021 10:23

@Mayur Vaghasiya, вы можете использовать функции componentDidMount и componentDidUnmount для компонента класса. Один из моих useEffect предназначен для componentDidMount, а другой из моего возврата useEffect - для componentDidUnmount. Я отредактирую свой ответ позже, когда у меня будет время.

Michael Harley 11.03.2021 13:44

Есть ли способ изменить сообщение в приглашении, которое появляется после перезагрузки?

Dhiraj Sharma 06.05.2021 08:34

Другие вопросы по теме