2016-11-29 16 views
6

Używam w mojej aplikacji react-router.Jak przekierować stronę z Javascriptem w React-Router?

Na mojej stronie logowania potrzebuję uwierzytelnienia z ajax i przekierowania w razie sukcesu.

Niektórzy lubią następujący kod:

class PageLogin extends React.Component { 
    login() { 
     // How to can I redirect to another page if auth success? 
    } 

    render() { 
     return (
      <div className="login-page"> 
       <form action=""> 
        <div className="form-group"> 
         <label>Username:</label> 
         <input type="text"/> 
        </div> 
        <div className="form-group"> 
         <label>Password:</label> 
         <input type="text"/> 
        </div> 
        <div> 
         <button onClick={this.login}>Login</button> 
        </div> 
       </form> 
      </div> 
     ) 
    } 
} 

W moim login funkcji, jak można przekierować na inną stronę, jeśli sukces uwierzytelniania?

Odpowiedz

6

Kontekst jest najlepszym rozwiązaniem, jednak oficjalna dokumentacja mówi, że można również użyć withRouter umieścić router rekwizyt do składnika, który będzie prawidłowo wykonywać historię przejścia Stan:

import { withRouter } from 'react-router'; 

class PageLogin extends React.Component { 
    login() { 
     this.props.history.push('/some/location'); // for [email protected] it would be this.props.router.push('/some/location'); 
    } 

    render() { 
     return (
      <div className="login-page"> 
       <form action=""> 
        <div className="form-group"> 
         <label>Username:</label> 
         <input type="text"/> 
        </div> 
        <div className="form-group"> 
         <label>Password:</label> 
         <input type="text"/> 
        </div> 
        <div> 
         <button onClick={this.login}>Login</button> 
        </div> 
       </form> 
      </div> 
     ) 
    } 
} 

export default withRouter(PageLogin); 
+0

Dziękuję bardzo! działa dla mnie – Lai32290

+0

bravvoo .. !! dokładnie to, czego szukałem, Wielkie dzięki! – Anil

+0

link jest 404, myślę, że nowa lokalizacja to https://reacttraining.com/react-router/web/api/Router – Doug

1

Będziesz mieć odniesienie do routera w kontekście. You can simply call router.push with your new path to redirect.

class PageLogin extends React.Component { 
    login() { 
    this.context.router.push('/newPath'); 
    } 
    ... 
} 

PageLogin.contextTypes = { 
    router: React.PropTypes.object 
} 
może

Jeśli nie chcesz, aby wcisnąć drogę do ich historii, ale zamiast zastąpić ich aktualnej trasy, call replace instead. Interfejs API jest identyczny z push.

+1

linki są martwe! czy możesz zaktualizować? –

+0

To nie jest aktualne API routera React. Wybrana najlepszą odpowiedzią jest teraz prawidłowe użycie. –

+0

ok dzięki! :) –

Powiązane problemy