Saltar al contenido

¿Cómo puedo redirigir a una ruta absoluta con react-router v4?

Solución:

Desafortunadamente, esto no es posible. Si está utilizando un nombre de base, se agregará a la base de cada ruta antes de que se cree el href. Esto sucede en el history módulo en createBrowserHistory en el push y replace métodos que utilizan la siguiente función:

var createHref = function createHref(location) {
    return basename + (0, _PathUtils.createPath)(location);
};

usa ya sea push o replace método.

Puede encontrar el siguiente bloque de código en el Redirect.prototype.perform método:

if (push) {
  history.push(to);
} else {
  history.replace(to);
}

Lo anterior se puede encontrar en Redirect.js en el react-router módulo que es lo que react-router-dom módulo importa y luego exporta.

Para hacer lo que intentas hacer, haría el basename a const y lo agregó al frente de su camino en cada una de sus rutas.

Es una pena que no haya un ignoreBasename opción para un <Route /> o <Redirect />, aunque es implementable.

Como se menciona en la respuesta de Kyle, no hay forma de tener que usar URL absolutas o ignorar el nombre de base; sin embargo, si desea o “necesita” ejecutar la redirección desde el método de renderizado de su componente, puede crear su propio componente ultraligero de “redirección absoluta”, aquí está el mío:

import React from 'react'

class AbsoluteRedirect extends React.Component {

    constructor(props){
        super(props)
    }

    componentDidMount(){
        window.location = this.props.to
    }

    render(){
        return null
    }

}

export default AbsoluteRedirect

Y luego utilícelo en otros componentes con una condición para que solo se monte cuando su validación sea verdadera.

render(){ 

    if( shouldRedirect )
        return <AbsoluteRedirect to={ anotherWebsiteURL } />

    ...

}

Espero que esto ayude 🙂

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *