0

Below is my code for App.js and Login.js Login page is at http://localhost:3000/login So if user successfully login how can I redirect the user to http://localhost:3000/home page which loads the "HomeComponent.jsx" .I have omitted the code for "HomeComponent.jsx" for brevity

    const App = () => {
      return (
        <div className="App">
          <>
            <header className="App-header">My App </header>
            <Router>
    
              <Route path="/login" exact component={Login} />
    
            </Router>
          </>
    
    
        </div>
      );
    
    };



import React, { useState, props } from 'react';
import LoginStatus from './LoginStatus';

const Login = () => {

    const [username, setUsername] = useState('my user name');
    const [password, setPassword] = useState('pass');
    const [loginStatus, setloginStatus] = useState(true);


    const loginClicked = () => {
        if (username === 'xyz' && password === 'pass') {
            console.log("Login Success");
            console.log("login loginStatus " + loginStatus);

            setloginStatus(true);
        } else {
            console.log("Login Failed");
            setloginStatus(false);
            console.log("login loginStatus " + loginStatus);



        }
    }


    return (
        <div>
            <h1>Login</h1>
            <div className="container">

                <LoginStatus loginStatus={loginStatus}></LoginStatus>

                User Name: <input type="text" name="username" value={username}
                    onChange={(event) => { setUsername(event.target.value) }}
                />

                    Password: <input type="password" name="password" onChange={(event) => { setPassword(event.target.value) }} />
                <button className="btn btn-success" onClick={loginClicked} >Login</button>
            </div>
        </div>
    )
}


export default Login;
0

2 Answers 2

0

Use props.history.push('/dashboard') -> This won't reload the page and changes the component. window.location.href='/dashboard' also works but this reloads the page.

Inside your Login Function:

const Login = () => {

    const [username, setUsername] = useState('my user name');
    const [password, setPassword] = useState('pass');
    const [loginStatus, setloginStatus] = useState(true);


    const loginClicked = () => {
        if (username === 'xyz' && password === 'pass') {
            console.log("Login Success");
            console.log("login loginStatus " + loginStatus);

            setloginStatus(true);
          // If login succeeds then redirect
          props.history.push('/dashboard') 
          // 
           
        } else {
            console.log("Login Failed");
            setloginStatus(false);
            console.log("login loginStatus " + loginStatus);



        }
    }
}
Sign up to request clarification or add additional context in comments.

Comments

0

React Router provides a Redirect component that will redirect if it is present in the DOM.

<Redirect to="/home" />

I would, using the state condition of your loginStatus, render inside your Login component's return like so:

return (
    <h1>Login</h1>
            <div className="container">
                {loginStatus && <Redirect  to="/home" />
    {/* the rest of your return */}
)

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.