reactjs - React Redux 在 axios 响应之前渲染应用程序
问题描述
我需要在渲染应用程序之前检查 auth staues
我像这样在 index.js 中运行操作:
import ReactDOM from 'react-dom';
import "bootstrap/dist/css/bootstrap.css";
import App from './App';
import reportWebVitals from './reportWebVitals';
import store from './store/index';
import { Provider } from 'react-redux'
import { BrowserRouter } from 'react-router-dom';
import {authCheckStaut} from './store/actions/auth'
store.dispatch(authCheckStaut());
ReactDOM.render(
<Provider store={store}>
<BrowserRouter basename="/">
<App />
</BrowserRouter>
</Provider>,
document.getElementById('root')
);
reportWebVitals();
这是应用程序页面:
import { connect } from 'react-redux';
import { BrowserRouter as Router, Route, Switch, withRouter} from "react-router-dom";
import PrivateRoute from './routes/compoments/PrivateRoute'
import * as actions from '../src/store/actions/auth';
const Login = lazy(() => import("./users/components/login"));
const Signup = lazy(() => import("./users/components/signup"));
const Dashboard = lazy(() => import("./users/components/dashboard"));
const App = (props)=> {
return (
<Router>
<Suspense fallback={<h1>Loading...</h1>}>
<Switch>
<Route exact path="/login" component={Login} />
<Route exact path="/signup" component={Signup} />
<PrivateRoute exact path="/" component={Dashboard} auth={props.currentUser} />
</Switch>
</Suspense>
</Router>
);
}
const mapStateToProps = state => ({ currentUser: state.auth });
export default withRouter(connect(mapStateToProps, actions)(App));
这是 PrivetRoute 页面:
import {Route, Redirect} from 'react-router-dom';
const PrivateRoute = ({component:Component,auth,...rest}) => {
return (
<Route
{...rest}
render = {props =>{
console.log('PR',auth)
if(!auth.isAuthenticated){
return <Redirect to={{
pathname: '/login',
state: { from: props.location }
}}/>
} else {
return <Component {...props}/>
}
}}
/>
)};
export default PrivateRoute;
我做了一些控制台日志来跟踪我的应用程序
如您所见,他在渲染应用程序后更新了商店状态,因此即使它是有效令牌,它也将始终重定向到登录
解决方案
推荐阅读
- java - Kubernetes 在 pod 之间共享持久卷导致没有文件事件
- android - Android服务被杀死
- html - 使视差在没有背景附件的 iOS 上工作:已修复
- ruby-on-rails - 用红宝石中的偏移值转换另一个时区的日期时间
- swift - 如果 ViewControllerTwo 中的 UIView 从 ViewControllerOne 更改可见性
- mysql - MYSQL:具有多个值的子句,包括 null
- css - 如何使用嵌入式 vuetify 应用解决 css 冲突
- angular-material - 有没有办法使用赛普拉斯验证 Angular Material 对话框中的文本?
- flutter - 刷新 ListView 中的数据颤动
- ios - UIVideoEditorController 不断取消而不是保存