Почему перезагрузка страницы возвращает меня в роут по адресу "/"?

Вот так выглядит компонент App в моем приложении.

const App = observer(props => {
  return (
     <Router >
         <div className="App">
             <Switch>
                 <Route path={"/"} exact component={() => <EnterPage appStore={appStore}/>} ></Route>
                 <Route path={"/registration"} component={RegistrationPage} isAuth={appStore.isAuth} />
                 <ProtectedRoute path={"/characters"} exact component={CharactersPage} isAuth={appStore.isAuth} />
                 <ProtectedRoute path={"/characters/:id"} component={CharacterPage} isAuth={appStore.isAuth} />
                 <ProtectedRoute path={"/locations"} exact component={LocationsPage} isAuth={appStore.isAuth} />
                 <ProtectedRoute path={"/locations/:id"} component={LocationPage} isAuth={appStore.isAuth} />
                 <ProtectedRoute path={"/episodes"} exact component={EpisodesPage} isAuth={appStore.isAuth} />
                 <ProtectedRoute path={"/episodes/:id"} component={EpisodePage} isAuth={appStore.isAuth} />
                 <ProtectedRoute path={"/settings"} component={SettingsPage} isAuth={appStore.isAuth} />
             </Switch>
         </div>
     </Router>
  );
})

ProtectedRoute - это просто кастомный роут.

import React from 'react';
import { Route, Redirect } from 'react-router-dom';
function ProtectedRoute({ isAuth: isAuth, component: Component, ...rest }) {
    return (
        <Route
            {...rest}
            render={(props) => {
                if(isAuth) {
                    return <Component />
                } else {
                    return <Redirect to={{ pathName: "/", state: { from: props.location} }}/>
                }
            }}
        />
    );
}
export default ProtectedRoute;

Начальная страница - это страница с авторизацией. После успешной авторизации в Mobx меняется state(isAuth = true). Дальше можно перейти по роутам с адресами "/characters", "/characters", "/locations", "/episodes" ... .Если нахожусь в этих страницах и обновляю страницу вручную, то меня перебрасывает в начальную страницу, при этом после этого авторизация сбрасывает и попасть обратно в ProtectedRoute не дает.

Как решить проблему? Читал статьи про использование функции refresh - не получилось. Есть идеи по поводу изменения default-ного поведения при обновлении страницы, но нет идей как это реализовать.


Ответы (1 шт):

Автор решения: Asilbek

тоже сталкивался с этой проблемой

import {useNavigate} from 'react-router-dom'

const navigate = useNavigate()

useEffect(() => {
        navigate(JSON.parse(window.sessionStorage.getItem('lastRoute') || '{}'))
        window.onbeforeunload = () => {
            window.sessionStorage.setItem('lastRoute', JSON.stringify(window.location.pathname))
        }
    }, [])

Можешь добавить этот код в файл App.js в блок useEffect. Перед перезагрузкой страницы, мы записываем последний роут в sessionStorage и потом можем к нему обратиться, чтобы взять этот роут и перенаправить на него

→ Ссылка