登录后隐藏登录和注册问题
登录后,我setState检查:true,母鸡,通过单击注销按钮,我要设置状态检查:false-但不幸的是,它不起作用。
在尝试在Navigation.js中设置setState之前,但单击注销按钮后,“登录/注册”可能显示了0.01秒,但我仍然只能看到注销按钮 请帮忙,谢谢你!
这是我的代码
Navigation.js
import React, { Component } from "react";
import "./Navigation.css";
import { Nav, Navbar } from "react-bootstrap";
import axios from 'axios'
export default class Navigation extends Component {
state = {
button: []
}
render() {
let buttons
if (this.props.check) {
buttons = (
<Nav className="mr-auto">
<Nav.Link href="\signin" onClick={() => {
localStorage.removeItem('jwt')
this.setState({
check: false
})
}
}>Logout</Nav.Link>
</Nav>
)
}
else if (!this.props.check) {
buttons = (
<Nav className="mr-auto">
<Nav.Link href="\signin">Sign In</Nav.Link>
<Nav.Link href="\register">Register</Nav.Link>
</Nav>
)
}
return (
<Navbar
className="NavbarContainer"
collapseOnSelect
expand="lg"
bg="light"
variant="light"
>
<Navbar.Brand href="\">
LOGO
{/* <Nav.Link href="\">LOGO</Nav.Link> */}
</Navbar.Brand>
<Navbar.Toggle aria-controls="responsive-navbar-nav" />
<Navbar.Collapse id="responsive-navbar-nav">
{/* <Nav className="mr-auto">
<Nav.Link href="\signin">Sign In</Nav.Link>
<Nav.Link href="\register">Register</Nav.Link>
</Nav> */}
{buttons}
</Navbar.Collapse>
</Navbar>
);
}
}
和App.js
import React, { Component } from "react";
import {
BrowserRouter,
BrowserRouter as Router,
Route,
Switch,
} from "react-router-dom";
import axios from "axios";
import Navigation from "./components/Navigation/Navigation";
export default class App extends Component {
state = {
user: [],
check: false,
};
async componentDidMount() {
axios.get("http://localhost:8002/users/me", {
headers: {
Authorization: `Bearer ` + localStorage.getItem("jwt"),
},
})
.then((res) => {
this.setState({
user: res.data,
check: true,
})
console.log(res.data);
})
.catch((err) => {
console.log("error nie dziala" + err);
});
}
render() {
return (
<div className="App">
<BrowserRouter>
<Navigation user={this.state.user, this.state.check} />
<section className="mainContainer">
<Router>
<Switch>
<Route exact path="/" component={Home}></Route>
<Route path="/register" component={Register}></Route>
<Route path="/signin_user" component={SignInAsUser}></Route>
<Route
path="/signin_specialist"
component={SignInAsSpecialist}
></Route>
<Route
path="/user_registration"
component={RegisterUser}
></Route>
<Route
path="/specialist_registration"
component={RegisterSpecialist}
></Route>
<Route
path="/search_for_specialist"
component={SearchForSpecialist}
></Route>
<Route
path="/activespecialists"
component={ActiveSpecialists}
></Route>
<Route
path="/specialist_account"
component={SpecialistAccount}
></Route>
<Route path="/signin" component={SignIn}></Route>
<Route
path="/user"
component={() => <UserAccount user={this.state.user} />}
></Route>
<Route path="/specialist" component={SpecialistAccount}></Route>
<Route
path="/activeSpecialist"
component={SpecialistAccount}
></Route>
<Route component={NoMatch}></Route>
</Switch>
</Router>
</section>
<Footer />
</BrowserRouter>
</div>
);
}
}
答案 0 :(得分:0)
它不起作用,因为您正在更新导航中的状态,该状态仅包含按钮数组,而不检查状态。 您应该从孩子那里更新您的父母身份。例如,可以通过将父setState函数传递给子级来实现此目的。 这里有一些类似的问题,例如,尝试在此处查找: How to update parent's state in React?
或者您可以实现一些全局状态。