Giovanny Andres Palacios Cuartas
PreguntaHay algún cambio en react-router?, al intentar el
this.props.history.push('/badges'); <code>Yorman José Rodríguez Moreno
Buenas bro! a mi me pasaba algo similar, al oprimir el botón me salio un error que "history" no estaba definido. Lo que pasa, es que dentro de Route yo no coloque component={BadgeNew} sino que lo puse como un hijo. Solo debes ponerlo como en clase component={BadgeNew} para que te redirija sin error. Espero este sea tu problema y te haya podido ayudar.
Marc Sánchez Díaz
A mi me pasaba lo mismo y parte del problema es lo que comenta Yorman.
Cuando defines el componente a renderizar para una ruta concreta, se puede hacer de 4 maneras. La que Richard explica en el curso es:
... <Route exact path='/badges/new' component={BadgeNew} /> ...
De esta forma a
<BadgeNew />propsmatchlocationhistoryprops... <Route exact path='/badges/new'> <BadgeNew /> </Route> ...
Según la documentación de
react-routerEntonces, para navegar desde un componente que se ha declarado como hijo de un
RouteOpción 1: usar withRoute
withRouteAl exportar el componente con withRoute, como en el codigo que sigue...
... import { withRouter } from 'react-router-dom' ... class BadgeNew extends React.Component { //Aquí todo el código del componente // y finalmente... } export default withRouter(BadgeNew);
... tengo disponible en el código del componente
matchlocationhistorythis.props.history.push('/badges');
Opción 2: usar <Redirect /> (la que prefiero)
<Redirect />En este articulo está muy bien explicado (en inglés) y básicamente consiste en definir una nueva varible para saber si hay que navegar o no, y en el render, actuar en consecuencia y navegar por medio de un
Redirect... import { Redirect } from 'react-router-dom' ... class BadgeNew extends React.Component { state = { volvemos: false, ... //En handleSubmit, tras recibir la llamada de la api, no solo indicamos que ya no cargamos, sino que podemos volver (o ir a otro sitio, por ejemplo si fuera un formulario multipagina. this.setState({loading: false, volvemos: true }); // y en el render, igual que tratamos con el loading o los errores, hacemos la navegación, cuando es el momento render () { if (this.state.volvemos) { return <Redirect to='/badges' /> } ...
Espero que os sirva, a mi me ha llevado unas cuantas horas dar con todo esto, pero con lo que he aprendido ha valido la pena!
![Curso de React.js [Empieza Gratis]](https://static.platzi.com/media/courses/OG-reactjs.png)