Обработка событий навигации React
Я думаю, что вы ищете getUserConfirmation
prop компонента BrowserRouter
.
Функция, переданная в prop может выглядеть так (пример TypeScript):
const getUserConfirmation = (
message: string,
callback: (ok: boolean) => void
): void => {
const answer = window.confirm("Do you want to navigate away?");
// do something depending on which button was pressed
callback(answer); // allow or disallow React's navigation
};
В том месте, где вы определяете свои маршруты:
<BrowserRouter getUserConfirmation={getUserConfirmation}>
... routes go here ...
</BrowserRouter>
Вам все равно нужно будет использовать <Prompt>
, хотя:
<Prompt
when={boolean}
message="This string will be supplied in the confirmation function above as second parameter"
/>
Обработка обновлений браузера sh
Вы можете добавить такой обратный вызов
window.onbeforeunload = () => {
// some non-blocking logic
return true;
};
После того, как он вам больше не понадобится , вы можете очистить:
window.onbeforeunload = null;
Глядя на этот вопрос SO , не представляется возможным из коробки захватить ответ пользователя на собственное окно подтверждения в onbeforeunload
.
Вероятно, window.onunload
будет подходящим местом для очистки ваших данных, поскольку это, скорее всего, означает, что пользователь решил покинуть страницу.