Как очистить props.location.state при обновлении?

Я перехожу на другую страницу, где передаю такие данные:

this.props.history.push({
  pathname: "/someotherpage",
  state: { somedata: somedata }
});   

Теперь на /someotherpage у меня есть условие в моем методе render(), чтобы показать компонент в зависимости от того, не является ли this.props.location.state нулевым.

{this.props.location.state && (
    <SomeComponent>
        {this.props.location.state.somedata}
    </SomeComponent>
)}

Работает. Однако, когда я обновляю страницу, <SomeComponent> все еще отображается, поскольку он все еще хранит this.props.location.state.somedata, даже если я обновляюсь. Как мне сбросить this.props.location.state до нуля при обновлении страницы? (Кажется, это ясно, когда вы уходите, только при обновлении он сохраняется.)

Поведение ключевого слова "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) для оценки ваших знаний,...
13
0
12 899
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Попробуй это:

history.replace('', null);

Достаточно близко .. Я использовал history.replace ('/ currentroute', null);

catandmouse 14.11.2018 03:49

у меня не вышло, у меня эта ошибка Property 'replace' does not exist on type 'History'

Alfrex92 03.07.2020 11:00

Проверьте свой импорт. Я думаю, вы импортируете неправильный модуль истории. Это должен быть импорт {History} из 'истории';

Ashish Kirodian 03.07.2020 11:45
history.replace('' null); У меня не работает. Он перенаправляет меня на / Но использование history.replace(location.pathname, null); работает нормально!
Anurag Bhagsain 05.09.2020 06:30

В качестве обходного пути вы можете добавить функцию, как показано ниже, чтобы отличать обновить страницу от this.props.history.push, как показано ниже:

isPageRefreshed() {
    return window.performance && performance.navigation.type === 1;
  }

Затем, когда вы хотите проверить, обновляется ли он или перенаправляется с другой страницы, вы можете использовать вот так

{!this.isPageRefreshed && this.props.location.state && (
    <SomeComponent>
        {this.props.location.state.somedata}
    </SomeComponent>
)}

Ссылка: https://stackoverflow.com/a/50026758/8777471

Используйте window.history.replaceState(null, ''), чтобы очистить состояние местоположения после использования значения.

Веб-документы MDN: History.replaceState ()

The History.replaceState() method modifies the current history entry, replacing it with the stateObj, title, and URL passed in the method parameters

Syntax: history.replaceState(stateObj, title, [url]);

Заголовок можно оставить пустым, а URL указывать необязательно.

Суть в том, что Это не вызывает повторного обновления.

Проблема с этим подходом заключается в том, что он стирает всю историю и влияет на кнопку «Вперед». Есть еще идеи, как это исправить?

Alfrex92 03.07.2020 10:33

все работает, спасибо! это должен быть правильный ответ ?

Alfrex92 06.07.2020 03:59
history.replace('' null); У меня не работает. Он перенаправляет меня на / Но использование history.replace(location.pathname, null); работает нормально!
Anurag Bhagsain 05.09.2020 06:28

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