Sas*_*ria 5 javascript reactjs react-router-dom
我有公共和受保护的路由,它们按以下逻辑实现
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;
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,当我刷新路线 /staff?page=1 上的页面时,应用程序从头开始初始化,并且我被重定向到 /clients 路线。对于这种情况,有什么办法可以处理吗?即,当我刷新私有路线时,我应该留在同一页面上。也许我应该将当前路线保存到本地存储?
刷新后必须使用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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1439 次 |
| 最近记录: |