Estoy tratando de hacer UN SIMPLE usando react-router ( versión ^ 1.0.3 ) para redirigir a otra vista y me estoy cansando.
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;
todo lo que necesito es enviar el uso a '/ login' y eso es todo.
Que puedo hacer ?
errores en la consola:
Error de referencia no detectado: PropTypes no está definido
archivo con mis rutas
// 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
Reaccionando
fuente
fuente
routes
definiciones y también si hay una razón por la que no está utilizando elLink
componente? Además, mencione qué errores está recibiendo.<Link to="/login">Log In</Link>
,?Uncaught ReferenceError
, está llamando comoPropTypes
, pero no importa eso, necesita importar PropTypes como él mismo o usarReact.PropTypes
react-router
cambio de api en 5 minutos ... jaja es broma, pero solo parcialmenteRespuestas:
Para obtener una respuesta simple, puede usar el
Link
componente dereact-router
, en lugar debutton
. Hay formas de cambiar la ruta en JS, pero parece que no las necesita aquí.Para hacerlo programáticamente en 1.0.x, te gusta esto, dentro de tu función clickHandler:
this.history.pushState(null, 'login');
Tomado del documento de actualización aquí
Debería haber
this.history
colocado en su componente controlador de ruta porreact-router
. Si el componente secundario está debajo del mencionado en laroutes
definición, es posible que deba transmitirlo másfuente
if (true) { // redirect to login}
por eso puse eso en un onClick función{validation && <Link to="/login" />Click to login</Link>}
. Si la validación es falsa, no se generará nada.1) react-router> V5
useHistory
hook:Si tiene
React >= 16.8
componentes funcionales, puede usar eluseHistory
enlace de react-router .2) react-router> V4
withRouter
HOC:Como @ambar mencionó en los comentarios, React-router ha cambiado su base de código desde su V4. Aquí están las documentaciones - oficial , conRouter
3) React-router <V4 con
browserHistory
Puede lograr esta funcionalidad utilizando react-router
BrowserHistory
. Código a continuación:4) Redux
connected-react-router
Si ha conectado su componente con redux y ha configurado connected-react-router, todo lo que tiene que hacer es es
this.props.history.push("/new/url");
decir, no necesitawithRouter
HOC para inyectarhistory
los accesorios del componente.fuente
react-router-dom
doesPor ejemplo, cuando un usuario hace clic en un enlace,
<Link to="/" />Click to route</Link>
react-router buscará/
y puede usarRedirect to
y enviar al usuario a otro lugar como la ruta de inicio de sesión.De los documentos de ReactRouterTraining :
fuente
<Redirect> elements are for router configuration only and should not be rendered
.Más fácil solución sencilla para la web!
Hasta la fecha 2020
confirmado trabajando con:
¡Usa el
useHistory()
gancho!fuente
Con react-router v2.8.1 (probablemente otras versiones 2.xx también, pero no las he probado) puede usar esta implementación para hacer una redirección de enrutador.
fuente
La solución más sencilla es:
fuente