Estou tentando fazer um SIMPLE usando o react-router ( versão ^ 1.0.3 ) para redirecionar para outra visão e estou ficando cansado.
import React from 'react';
import {Router, Route, Link, RouteHandler} from 'react-router';
class HomeSection extends React.Component {
static contextTypes = {
router: PropTypes.func.isRequired
};
constructor(props, context) {
super(props, context);
}
handleClick = () => {
console.log('HERE!', this.contextTypes);
// this.context.location.transitionTo('login');
};
render() {
return (
<Grid>
<Row className="text-center">
<Col md={12} xs={12}>
<div className="input-group">
<span className="input-group-btn">
<button onClick={this.handleClick} type="button">
</button>
</span>
</div>
</Col>
</Row>
</Grid>
);
}
};
HomeSection.contextTypes = {
location() {
React.PropTypes.func.isRequired
}
}
export default HomeSection;
tudo que eu preciso é enviar o uso para '/ login' e pronto.
O que eu posso fazer ?
erros no console:
ReferenceError não capturado: PropTypes não está definido
arquivo com minhas rotas
// LIBRARY
/*eslint-disable no-unused-vars*/
import React from 'react';
/*eslint-enable no-unused-vars*/
import {Route, IndexRoute} from 'react-router';
// COMPONENT
import Application from './components/App/App';
import Contact from './components/ContactSection/Contact';
import HomeSection from './components/HomeSection/HomeSection';
import NotFoundSection from './components/NotFoundSection/NotFoundSection';
import TodoSection from './components/TodoSection/TodoSection';
import LoginForm from './components/LoginForm/LoginForm';
import SignupForm from './components/SignupForm/SignupForm';
export default (
<Route component={Application} path='/'>
<IndexRoute component={HomeSection} />
<Route component={HomeSection} path='home' />
<Route component={TodoSection} path='todo' />
<Route component={Contact} path='contact' />
<Route component={LoginForm} path='login' />
<Route component={SignupForm} path='signup' />
<Route component={NotFoundSection} path='*' />
</Route>
);
javascript
reactjs
Reagindo
fonte
fonte
routes
definições, e também se há motivo para você não estar usando oLink
componente? Além disso, mencione quais erros você está recebendo.<Link to="/login">Log In</Link>
?Uncaught ReferenceError
, você está chamando comoPropTypes
, mas não importa isso, você precisa importar PropTypes como ele mesmo ou usarReact.PropTypes
react-router
mudança da API em 5 minutos .. haha está brincando, mas apenas parcialmenteRespostas:
Para uma resposta simples, você pode usar o
Link
componente dereact-router
, em vez debutton
. Existem maneiras de alterar a rota em JS, mas parece que você não precisa disso aqui.Para fazer isso programaticamente em 1.0.x, você faz assim, dentro de sua função clickHandler:
this.history.pushState(null, 'login');
Retirado do documento de atualização aqui
Você deve ter
this.history
colocado em seu componente de manipulador de rota porreact-router
. Se for um componente filho abaixo do mencionado naroutes
definição, você pode precisar transmiti-lo mais adiantefonte
if (true) { // redirect to login}
é por isso que coloquei isso em um onClick função{validation && <Link to="/login" />Click to login</Link>}
. Se a validação for falsa, nada será renderizado.1) react-router>
useHistory
gancho V5 :Se você tiver
React >= 16.8
e componentes funcionais, você pode usar ouseHistory
gancho do react-router .2) react-router> V4
withRouter
HOC:Como @ambar mencionou nos comentários, o React-router mudou sua base de código desde sua V4. Aqui estão as documentações - oficial , withRouter
3) Roteador React <V4 com
browserHistory
Você pode obter essa funcionalidade usando o react-router
BrowserHistory
. Código abaixo:4) Redux
connected-react-router
Se você conectou seu componente com redux e configurou o roteador conectado-reagente, tudo o que você precisa fazer é
this.props.history.push("/new/url");
, ou seja, não precisa dowithRouter
HOC para injetarhistory
nos props do componente.fonte
react-router-dom
fazPor exemplo, quando um usuário clica em um link, o
<Link to="/" />Click to route</Link>
react-router procura/
e você pode usarRedirect to
e enviar o usuário para outro lugar, como a rota de login.Dos documentos para ReactRouterTraining :
fonte
<Redirect> elements are for router configuration only and should not be rendered
.A solução mais fácil para web!
Até a data de 2020
confirmou o trabalho com:
Use o
useHistory()
gancho!fonte
Com o react-router v2.8.1 (provavelmente outras versões 2.xx também, mas não testei) você pode usar esta implementação para fazer um redirecionamento de roteador.
fonte
A solução mais simples é:
fonte