小编典典

使用React Router导航到路径时,组件状态值将重置为默认值

reactjs

我正在使用React-Routerv4,当我使用登录表单登录时,我将isUser使用function从子组件登录中设置了应用程序组件状态值为true
setUserLogin,可以在登录后在控制台中正确调试。此外,我还指定了,如果我迁移到/loginpath,它将检查isUser状态值以迁移到/home page用户是否已经登录(isUseris
true)。但是false,当我/login在浏览器中输入时,该值现在自动更改为默认值,并且显示登录页面而不是主页。我是React的新手,所以我在这里错过了什么吗?这是代码片段:

import React from 'react';
import ReactDom from 'react-dom';
import 'materialize-css/bin/materialize.css'
import 'materialize-css/bin/materialize.js';
import {BrowserRouter as Router, Route , Redirect} from 'react-router-dom';
import {LoginForm} from './components/login';
import {Home} from './components/home';
import {Main} from './components/main';
import {Room} from './components/room';
import "materialize-css";
import 'materialize-css/js/toasts';


class App extends React.Component {
    constructor(props){
        super(props);
        this.state={
            isUser : false
        }
        this.setUserLogin = this.setUserLogin.bind(this);
    }
    setUserLogin(){
        this.setState({isUser:true});
    }
    render() {
        return <Router>
            <div>
                <Route exact path="/" component={Home}/>
                <Route path="/login" render={(props)=>(
                    this.state.isUser ? <Redirect to="/home" /> : <LoginForm history={props.history} setUserLogin = {this.setUserLogin}/>
                )} />
                <Route path="/home" component={Main}/>
                <Route path="/room" component={Room}/>
            </div>
        </Router>
    };
}
ReactDom.render(<App/>, document.getElementById('app'));

阅读 318

收藏
2020-07-22

共1个答案

小编典典

如果我了解您的情况,当您在浏览器中手动更改URL时,您是否希望状态保持不变?如果需要,您必须将一些变量存储在持久性存储中(如localStorage),并在组件生命周期的某个时刻对其进行检查:构造函数,componentDidMount

当您手动更改浏览器位置时,包括状态在内的所有内容都会重新启动,整个页面将重新下载(或从缓存中读取)。

2020-07-22