Автоматическое перенаправление после входа в систему с react-router
Я хотел создать вход в Facebook в мой react / react-маршрутизатор / поток приложение.
У меня есть слушатель, зарегистрированный в событии входа в систему, и хотел бы перенаправить пользователя на '/dashboard'
если они вошли в систему. Как я могу это сделать? location.push
работал не очень хорошо, за исключением полной перезагрузки страницы.
7 ответов
реагирует маршрутизатор v0.13
на Router
экземпляр вернулся из Router.create
может передаваться (или, если внутри компонента React, вы можете получить его из контекст объекта), и содержит методы как transitionTo
что можно использовать для перехода на новый маршрут.
реагировать маршрутизатор v3
вот что я делаю
var Router = require('react-router');
Router.browserHistory.push('/somepath');
реагировать маршрутизатор v4
теперь мы можем использовать <Redirect>
компонент в маршрутизаторе React V4.
визуализация <Redirect>
перейти на новое место. Новое расположение переопределит текущее местоположение в стеке истории, например перенаправление на стороне сервера.
import React, { Component } from 'react';
import { Redirect } from 'react-router';
export default class LoginComponent extends Component {
render(){
if(this.state.isLoggedIn === true){
return (<Redirect to="/your/redirect/page" />);
}else{
return (<div>Login Please</div>);
}
}
}
документация https://reacttraining.com/react-router/web/api/Redirect
реагировать маршрутизатор v2
хотя на вопрос уже дан ответ, я думаю, что важно опубликовать решение, которое сработало для меня, поскольку оно не было охвачено ни одним из решений, приведенных здесь.
во-первых, я использую контекст маршрутизатора на моем LoginForm
компонент
LoginForm.contextTypes = {
router: React.PropTypes.object
};
после этого я могу получить доступ к router
объект внутри моей LoginForm
компонент
handleLogin() {
this.context.router.push('/anotherroute');
}
PS: работа над версией React-router 2.6.0
реагировать маршрутизатор v3
навигация вне компонентов
создать приложение с маршрутизатором, как это
// Your main file that renders a <Router>:
import { Router, browserHistory } from 'react-router'
import routes from './app/routes'
render(
<Router history={browserHistory} routes={routes} />,
mountNode
)
где - то как промежуточное по Redux или действие Flux:
import { browserHistory } from 'react-router'
// Go to /some/path.
browserHistory.push('/some/path')
// Go back to previous location.
browserHistory.goBack()
реагирует маршрутизатор v4.2.0
Я использую реагировать-16.2.0 & React-router-4.2.0
и я получаю решение этим кодом
this.props.history.push("/");
мой рабочий код:
.then(response => response.json())
.then(data => {
if(data.status == 200){
this.props.history.push("/");
console.log('Successfully Login');
}
})
Я следил за этим документом redirect-on-login-and-logout
Я также пытался return <Redirect to='/' />
но к несчастью, это не работает для меня.
реагировать маршрутизатор v3
навигация внутри компоненты
вы должны использовать withRouter
декоратор, когда необходимо перенаправить внутри компонента. Декоратор использует контекст вместо вас.
import {withRouter} from 'react-router'
fucntion Foo(props) {
props.router.push('/users/16');
}
export default withRouter(Foo);
withRouter(компонент, [опции])
HoC (компонент более высокого порядка), который обертывает другой компонент для повышения его реквизит с реквизитом маршрутизатора.
withRouterProps = { ...componentProps, обращать в бегство, params, местоположение, маршруты }
Pass в вашем компоненте и он возвратит завернутый компонент.
вы можете точно указать роутер как опору для компонента обертке переопределите объект маршрутизатора из контекста.
в магазине:
data.router.transitionTo('user');
и маршрутизатор:
"Route name="user" handler={User}"
пользователь является обработчиком маршрута