【问题标题】:Redirects to previous state once Nav Link clicked?单击导航链接后重定向到以前的状态?
【发布时间】:2019-02-25 02:50:16
【问题描述】:

所以我有一个导航栏,一旦用户单击“注销”,它就会呈现未登录用户看到的导航栏。到目前为止,我已经将其关闭,但我的问题是,当我单击网页上的其他点击之一时,例如“关于”,导航栏呈现回“注销”状态。我该如何解决这个问题?我认为这是因为在我的 App.js 源代码中,userId: 123(测试目的)是硬编码的,它总是运行它。

CustomNavbar.js

import React, { Component } from 'react'
import { Navbar, Nav, NavItem } from 'react-bootstrap';

class CustomNavbar extends Component {

    render() {
        if (this.props.userID === null) {
            return (
                <div>
                    <Navbar collapseOnSelect expand="md" bg="dark" variant="dark">
                        <Navbar.Brand href="/">
                            Ndnu's Notes
                        </Navbar.Brand>
                        <Navbar.Toggle aria-controls="responsive-navbar-nav" />
                        <Navbar.Collapse id="responsive-navbar-nav">
                        </Navbar.Collapse>
                    </Navbar>
                    <Navbar className="footer text-center" fixed="bottom" expand="lg" bg="light">
                        <Nav.Link href="/contactus">Contact Us</Nav.Link>
                        <Nav.Link href="/privacyterms">Privacy & Terms</Nav.Link>
                        <Nav.Link href="/about">About</Nav.Link>
                    </Navbar>
                </div>
            )
        } else {    
            return (
                <div>
                    <Navbar collapseOnSelect expand="md" bg="dark" variant="dark">
                        <Navbar.Brand href="/">
                        Ndnu's Notes
                    </Navbar.Brand>
                    <Navbar.Toggle aria-controls="responsive-navbar-nav" />
                        <Navbar.Collapse id="responsive-navbar-nav">
                            <Nav className="mr-auto">
                            </Nav>
                            <Nav>
                                <Nav.Link eventKey={2} href="/myAccount"> <i class="fas fa-user"></i> My Account</Nav.Link>
                                <Nav.Link eventKey={1} href="/" onClick={this.props.logUserOut}> <i class="fas fa-sign-out-alt"></i> Log Out</Nav.Link>
                            </Nav>
                        </Navbar.Collapse>
                    </Navbar>

                    {/* Footer */}
                    <Navbar fixed="bottom" bg="light">
                        <Nav.Link href="/contactus">Contact Us</Nav.Link>
                        <Nav.Link href="/privacyterms">Privacy & Terms</Nav.Link>
                        <Nav.Link href="/about">About</Nav.Link>
                    </Navbar>
                </div>
            )
        }
    }
}
export default CustomNavbar

App.js

import React from 'react';
import { BrowserRouter as Router, Route } from 'react-router-dom';
import LoginAndRegister from './LoginAndRegister'
import ContactUs from './Components/ContactUs.js';
import PrivacyTerms from './Components/PrivacyTerms.js';
import CustomNavbar from './Components/CustomNavbar.js';
import About from './Components/About.js';
import Table from './Components/Table.js';

class App extends React.Component {

constructor() {
    super();
    this.state = {
        userID: 123
    }
}
logUserOut = (e) => {
    e.preventDefault()
    this.setState({userID: null});
}

render() {
    return (
        <Router>
            <div>
                <CustomNavbar userID={this.state.userID} logUserOut={this.logUserOut} />
                <Route exact strict path="/contactus" component={ContactUs} />
                <Route exact strict path="/about" component={About} />
                <Route exact strict path="/privacyterms" component={PrivacyTerms} />
                  {!this.state.userID && <LoginAndRegister userID={this.state.userID}/>}
                <Table />
            </div>
        </Router>
    )
}
}
    export default App;

【问题讨论】:

    标签: reactjs state react-props


    【解决方案1】:

    您最好将用户登录状态保存在本地存储中,而不是检查状态。并检查用户是否已登录以呈现所需的输出。

    您必须将用户信息保存在某个中心位置,以便您可以在某些嵌套组件上轻松访问它,而不是将状态作为道具向下传递。

    其他选项可以是访问用户登录状态的上下文 api。

    似乎重新加载页面上的state.userID 值在重新加载后不存在。从您的代码中,您在构造函数中设置userID,它将在组件生命周期的挂载阶段称为老化。

    如有任何疑问,请联系我 :)

    【讨论】:

      猜你喜欢
      • 2021-11-08
      • 2013-04-10
      • 2017-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-09
      相关资源
      最近更新 更多