Soy nuevo en React Router y descubro que hay muchas formas de redirigir una página:
Utilizando
browserHistory.push("/path")import { browserHistory } from 'react-router'; //do something... browserHistory.push("/path");Utilizando
this.context.router.push("/path")class Foo extends React.Component { constructor(props, context) { super(props, context); //do something... } redirect() { this.context.router.push("/path") } } Foo.contextTypes = { router: React.PropTypes.object }En React Router v4, hay
this.context.history.push("/path")ythis.props.history.push("/path"). Detalles: ¿Cómo pasar al historial en React Router v4?
Estoy tan confundido con todas estas opciones, ¿hay una mejor manera de redirigir una página?
reactjs
redux
react-router
Liutong Chen
fuente
fuente

withRouterRespuestas:
En realidad, depende de su caso de uso.
1) Quiere proteger su ruta de usuarios no autorizados
Si ese es el caso, puede usar el componente llamado
<Redirect />y puede implementar la siguiente lógica:Tenga en cuenta que si desea
<Redirect />trabajar de la manera que espera, debe colocarlo dentro del método de renderizado de su componente para que eventualmente se considere como un elemento DOM; de lo contrario, no funcionará.2) Desea redirigir después de una determinada acción (digamos después de crear un elemento)
En ese caso, puede usar el historial:
o
Para tener acceso al historial, puede envolver su componente con un HOC llamado
withRouter. Cuando envuelve su componente con él, pasamatchlocationy sehistoryapoya. Para obtener más detalles, consulte la documentación oficial de withRouter .Si el componente es un niño de un
<Route />componente, es decir, si se trata de algo así<Route path='/path' component={myComponent} />, usted no tiene que ajustar su componente conwithRouter, ya que<Route />los pasesmatch,locationyhistorya su hijo.3) Redirigir después de hacer clic en algún elemento
Aquí hay dos opciones. Puede usar
history.push()pasándolo a unonClickevento:o puede utilizar un
<Link />componente:Creo que la regla general con este caso es intentar usar
<Link />primero, supongo que especialmente por el rendimiento.fuente
historyen sus accesorios para poder hacerthis.props.history.push('/path'), significa que el componente es hijo de<Route/>o tienewithRouterenvoltorio en la exportación ¿correcto?<Route path='/path' component={Comp}/>, supongo que simplementerender() { return <Comp/>}en una condición.this.props.historysin embargo, no estoy seguro de haber respondido correctamente la segunda pregunta. ¿Qué quieres decir exactamente conroute to another component?Ahora con react-router
v15.1y en adelante podemosuseHistoryenganchar, esta es una forma súper simple y clara. Aquí hay un ejemplo simple del blog fuente.Puede usar esto dentro de cualquier componente funcional y ganchos personalizados. Y sí, esto no funcionará con los componentes de clase al igual que cualquier otro gancho.
Obtenga más información sobre esto aquí https://reacttraining.com/blog/react-router-v5-1/#usehistory
fuente
También puede usar la biblioteca dom del enrutador react useHistory;
https://reactrouter.com/web/api/Hooks/usehistory
fuente
Una de las formas más sencillas: use Link de la siguiente manera:
Si queremos cubrir toda la sección div como enlace:
fuente
También puede
Redirecthacerlo de laRoutesiguiente manera. Esto es para manejar rutas no válidas.fuente