История запросов маршрутизатора React параметры запроса на изменение местоположения запроса

#reactjs #react-router #react-router-dom

#reactjs #реагирует-маршрутизатор #react-router-dom

Вопрос:

У меня проблема с использованием компонента react-router Prompt.

Я хочу предупреждать пользователей, когда они перезагружают или покидают страницу, за исключением 1 случая, когда я добавляю параметр запроса в URL.

Я уже сделал это, но когда я обновляю страницу после внесения изменений. Я возвращаюсь к пути «/», а не к текущей странице, над которой я работаю.

Пример: я работаю над путем «создать-контракт». Затем я хочу добавить запрос?screen={screen}, если пользователи нажимают на кнопку.

Теперь у меня есть «create-contract?screen={screen}», Затем, если я обновлю страницу и подтвержду или вернусь к предыдущему URL-адресу «create-contract» и обновлю.

Я перейду к пути «/». То, что я считаю неправильным.

Я хочу, чтобы он оставался на текущей странице при обновлении.

Здесь код:

 useEffect(() => {
        if (shouldBlockNavigation) {
            const existingHandler = window.onbeforeunload;
            window.onbeforeunload = (event) => {
                if (existingHandler) existingHandler(event);
                return true;
            };
        } else {
            if (screen) {
                history.push("?screen="   screen);
            } else {
                history.push(RouteConstant.Contract.CreateContract.path);
            }
        }
        return () => {
            window.onbeforeunload = null;
        };
    }, [shouldBlockNavigation, screen]);

return (
        <>
            <Prompt
                when={shouldBlockNavigation}
                message="作成中の書類を破棄します。よろしいですか?"
            />
            ...
       </>
)

 

Кто-нибудь, помогите мне, пожалуйста. Спасибо!

Ответ №1:

Нет информации о том, что является screen переменной.

Мне кажется, что после перезагрузки он переходит к этой части:

 else {
   if (screen) {
      history.push(RouteConstant.Contract.CreateContract.path   "?screen="   screen);
   } else {
      history.push(RouteConstant.Contract.CreateContract.path); // goes here
   }
}
 

Чтобы решить эту проблему, вы можете попытаться получить текущее местоположение, проанализировать его и, если оно содержит ?screen=screen , получить экран с этого URL-адреса и использовать его

Чтобы получить текущее местоположение, вы можете использовать useLocation() из react-router-dom

Комментарии:

1. Спасибо, что ответили на мой вопрос. Нет. при перезагрузке перейдите к регистру if (shouldBlockNavigation). переменная «screen» просто номер 1, 2, 3. Я стараюсь не показывать предупреждение, если я нажимаю на кнопку, которая добавляет запрос, такой как «?screen = 1». Но после этого, если я перезагружу страницу, она перейдет к пути «/», а не к текущему пути, над которым я работаю