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
withRouter
Respuestas:
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, pasamatch
location
y sehistory
apoya. 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
,location
yhistory
a su hijo.3) Redirigir después de hacer clic en algún elemento
Aquí hay dos opciones. Puede usar
history.push()
pasándolo a unonClick
evento: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
history
en sus accesorios para poder hacerthis.props.history.push('/path')
, significa que el componente es hijo de<Route/>
o tienewithRouter
envoltorio en la exportación ¿correcto?<Route path='/path' component={Comp}/>
, supongo que simplementerender() { return <Comp/>}
en una condición.this.props.history
sin embargo, no estoy seguro de haber respondido correctamente la segunda pregunta. ¿Qué quieres decir exactamente conroute to another component
?Ahora con react-router
v15.1
y en adelante podemosuseHistory
enganchar, 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
Redirect
hacerlo de laRoute
siguiente manera. Esto es para manejar rutas no válidas.fuente