javascript - 刷新页面后如何留在 protected 路线上。 react 路由器 5.2.0

标签 javascript reactjs react-router-dom

我有公共(public)和 protected 路线,它们在以下逻辑中实现

   useEffect(() => {
      checkIfAuthenticated(); //This function checks if the token is in localStorage
     // Initial state isAuthenticated = false
    }, []);
   const newHistory = useHistory()

   <Router history={newHistory}>
    {isAuthenticated ? (
      <Layout>
        <Switch>
          <Route
             exact
             path="/clients"
             component={Clients}
            />
          <Route
             exact
             path="/staff"
             component={Staff}
            />
          <Redirect to="/clients" />
        </Switch>
      </Layout>
       ) : (
      <>
       <Route path="/login" component={Login} />
       <Redirect to="/login" />
      </>)}
    </Router>

//store
checkIfAuthenticated() {
    const accessToken = localStorage.getItem("access_token");
    const refreshToken = localStorage.getItem("refresh_token");
    if (accessToken && refreshToken) {
      this.isAuthenticated = true;
    }
  }
问题是当我刷新路由/staff?page=1 上的页面时,应用程序从头开始初始化,我被重定向到/clients 路由。有什么办法可以处理这种情况吗?即当我刷新私有(private)路线时,我应该留在同一页面上。也许我应该将当前路由保存到 localStorage?

最佳答案

您必须使用 redux-persist库以保留 isAuthenticated 的值刷新后localStorage中的变量。
像这样的东西:

import { persistReducer } from 'redux-persist';
import storage from 'redux-persist/lib/storage';

import userReducer from './userReducer';

const persistConfig = {
  key: 'user',
  storage,
  whitelist: ['access_token', 'refresh_token'],
};

const persistedReducer = persistReducer(persistConfig, userReducer);

关于javascript - 刷新页面后如何留在 protected 路线上。 react 路由器 5.2.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70232827/

相关文章:

javascript - 将 JSON 数据反序列化到字典 <string, string> 时出错

javascript - 返回 React 组件中索引中的第一项

javascript - 如何在 react 中单击按钮将一个组件移动到另一个组件?

javascript - 通过导航重定向后,React Router 不会加载新的页面组件

reactjs - React Router v4 如何<Link>仅在路径名更改时替换

javascript - MomentJS 西类牙语时间

javascript - 根据某些情况禁用 div

react-router-dom - 如何修复 React Router 组件不随着路由更改而更新

javascript - 不断收到返回未定义的 TypeError

reactjs - 隐藏导航栏功能不起作用 useLocation