I want to change the user value to true when a user clicks a login button in my login page. I’m a beginner level web dev student and I am having hard times to solve this.
App.js
function App() {
const user = false;
return (
<Router>
<TopBar />
<Switch>
<Route exact path='/'>
<Home />
</Route>
<Route path='/register'>{user ? <Home /> : <Register />}</Route>
<Route path='/login'>{user ? <Home /> : <Login />}</Route>
<Route path='/write'>{user ? <Write /> : <Register />}</Route>
<Route path='/settings'>{user ? <Settings /> : <Register />}</Route>
<Route path='/post'>
<Single />
</Route>
</Switch>
</Router>
);
}
Login.jsx
export default function Login() {
return (
<div className='login'>
<span className="LoginTitle">Login</span>
<form className="loginForm">
<label>Email</label>
<input type="text" className='loginInput' placeholder='Enter your email...' />
<label>Password</label>
<input type="password" className='loginInput' placeholder='Enter your password...' />
<button className="loginButton">Login</button>
</form>
<button className="loginRegisterButton">
<Link className='link' to='/register'>Register</Link>
</button>
</div>
);
}
Thanks so much for helping!
Advertisement
Answer
communication between components is a very basic concept in React.
You can use multiple solutions from the simplest being using local state of the component and passing a method that will update your state in the child component like the example below.
Otherwise, you could use a the global state library. Some of the most popular are react context or redux for operations like that where the main concept is putting your data in a global state from where any component in your component tree can communicate with that data.
function App() {
const [user, setUser] = useState(false);
const setUserToTrue = () => setUser(true);
return (
<Router>
<TopBar />
<Switch>
<Route exact path='/'>
<Home />
</Route>
<Route path='/register'>{user ? <Home /> : <Register />}</Route>
<Route path='/login'>{user ? <Home /> : <Login onLoginButtonClick={setUserToTrue} />}</Route>
<Route path='/write'>{user ? <Write /> : <Register />}</Route>
<Route path='/settings'>{user ? <Settings /> : <Register />}</Route>
<Route path='/post'>
<Single />
</Route>
</Switch>
</Router>
);
}
export default function Login({onLoginButtonClick}) {
return (
<div className='login'>
<span className="LoginTitle">Login</span>
<form className="loginForm">
<label>Email</label>
<input type="text" className='loginInput' placeholder='Enter your email...' />
<label>Password</label>
<input type="password" className='loginInput' placeholder='Enter your password...' />
<button className="loginButton" onClick={onLoginButtonClick}>Login</button>
</form>
<button className="loginRegisterButton">
<Link className='link' to='/register'>Register</Link>
</button>
</div>
);
}