Search code examples
javascriptreactjsreact-routerreact-router-v4react-router-dom

React-Router not updating URL on redirect


I have an app using . I have a matching page which, unless you are logged in, you can't access. When a user is not logged in and tries to go to /match they get redirected to /login. My issue is that when the user is redirected to /login the URL stays as /match. This is causing issues elsewhere in my code. How can I get React-Router to update the URL when the user is redirected to /login? I am redirecting the page from my switch inside App.js. Here is an example of what my code looks like:

<Route
    path='/match'
    component= {
        () => {
            if (this.state.auth) return <HomePage />;
            else return <LoginPage />;
        }
    }
/>

TL;DR

How can I get the URL to change to /login if the user isn't logged in when trying to access /match.


Solution

  • You probably have a little miss conception on how React Router works. In your example React Router works just as it should since you are just rendering components.

    You should use React Router's <Redirect /> -component for redirecting user to new url.

    You could achieve your desired behaviour with this example code.

    <Route
      path='/match'
      render={
        () => {
          if(this.state.auth) return <HomePage />
          return <Redirect to="/login" />
        }
      }
    />
    <Route match="login" component={Login} />
    

    You can also achieve same kind of behaviour inside component programmatically with using React Router's provided prop props.history.push('/login') inside your component.