useBlocker

Функция позволяет предотвратить случайный выход пользователя с текущего экрана.

Пример

TypeScript
function ImportantForm() { let [value, setValue] = React.useState(""); // Блокирует переход на другой экран, если данные были введены let blocker = useBlocker( ({ currentLocation, nextLocation }) => value !== "" && currentLocation.pathname !== nextLocation.pathname ); return ( <Form method="post"> <label> Введите данные: <input name="data" value={value} onChange={(e) => setValue(e.target.value)} /> </label> <button type="submit">Сохранить</button> {blocker.state === "blocked" ? ( <div> <p>Вы уверены, что хотите покинуть страницу?</p> <button onClick={() => blocker.proceed()}> Покинуть </button> <button onClick={() => blocker.reset()}> Остаться </button> </div> ) : null} </Form> ); }

Объявление

TypeScript
useBlocker(onLeave: BlockerFunction): Blocker;

Параметры

Параметр
Тип
Описание
onLeave обязательный
Функция, которую роутер будет вызывать каждый раз при попытке ухода с текущего экрана, чтобы проверить, не приведёт ли это к потере данных. Подробнее о параметрах этой функции и значении, которое она возвращает, — в разделе Блокировка навигации.

Результат

useBlocker возвращает объект-блокировщик типа Blocker, у которого есть два метода и два поля:

Метод
Тип
Описание
proceed()
function
В состоянии blocked можно вызвать blocker.proceed(), чтобы дать пользователю уйти с экрана.
reset()
function
В состоянии blocked можно вызвать blocker.reset(), чтобы вернуть блокировщик обратно в unblocked и оставить пользователя на текущем экране.
Поле
Тип
Описание
state
string
Текущее состояние блокировщика:    • unblocked — блокировщик бездействует и не препятствует навигации.    • blocked — блокировщик предотвращает переход.    • proceeding — блокировщик разрешает переход.
location
string
Когда блокировщик находится в состоянии blocked, он указывает на экран, переход к которому был заблокирован. В состоянии proceeding — на экран, к которому осуществится переход после вызова blocker.proceed().

Материалы по теме