route react from ejemplo reactjs react-router

reactjs - from - react router ejemplo



¿Cómo obtener el historial en react-router v4? (5)

¡Esto funciona! https://reacttraining.com/react-router/web/api/withRouter

import { withRouter } from ''react-router-dom''; class MyComponent extends React.Component { render () { this.props.history; } } withRouter(MyComponent);

Tengo un pequeño problema al migrar de React-Router v3 a v4. en v3 pude hacer esto en cualquier lugar:

import { browserHistory } from ''react-router''; browserHistory.push(''/some/path'');

¿Cómo logro esto en v4?

Sé que podría usar, el hoc withRouter , el contexto de reacción o los accesorios del enrutador de eventos cuando estás en un Componente. Pero no es el caso para mí.

Estoy buscando la equivalencia de NavigatingOutsideOfComponents en v4


De manera similar a la respuesta aceptada, lo que puede hacer es usar el react-router react y react-router sí para proporcionarle un objeto de history que puede examinar en un archivo y luego exportar.

history.js

import React from ''react''; import { withRouter } from ''react-router''; // variable which will point to react-router history let globalHistory = null; // component which we will mount on top of the app class Spy extends React.Component { componentWillMount() { const { history } = this.props; globalHistory = history; } componentWillReceiveProps(nextProps) { globalHistory = nextProps.history; } render(){ return null; } } export const GlobalHistory = withRouter(Spy); // export react-router history export default function getHistory() { return globalHistory; }

Luego importa Importar componente y montar para inicializar la variable de historial:

import { BrowserRouter } from ''react-router-dom''; import { GlobalHistory } from ''./history''; function render() { ReactDOM.render( <BrowserRouter> <div> <GlobalHistory /> //..... </div> </BrowserRouter> document.getElementById(''app''), ); }

Y luego puede importar en su aplicación cuando se ha montado:

import getHistory from ''./history''; export const goToPage = () => (dispatch) => { dispatch({ type: GO_TO_SUCCESS_PAGE }); getHistory().push(''/success''); // at this point component probably has been mounted and we can safely get `history` };

Incluso hice un paquete npm que hace exactamente eso.


En el caso específico de react-router , el uso del context es un escenario de caso válido, p. Ej.

class MyComponent extends React.Component { props: PropsType; static contextTypes = { router: PropTypes.object }; render () { this.context.router; } }

Puede acceder a una instancia del historial a través del contexto del enrutador, por ejemplo, this.context.router.history .


Si está usando redux y redux-thunk, la mejor solución será usar react-router-redux

// then, in redux actions for example import { push } from ''react-router-redux'' dispatch(push(''/some/path''))

Es importante ver los documentos para hacer algunas configuraciones.


Solo necesita tener un módulo que exporte un objeto de history . Luego importarías ese objeto a lo largo de tu proyecto.

// history.js import { createBrowserHistory } from ''history'' export default createBrowserHistory({ /* pass a configuration object here if needed */ })

Luego, en lugar de usar uno de los enrutadores integrados, usaría el componente <Router> .

// index.js import { Router } from ''react-router-dom'' import history from ''./history'' import App from ''./App'' ReactDOM.render(( <Router history={history}> <App /> </Router> ), holder)

// some-other-file.js import history from ''./history'' history.push(''/go-here'')