Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

538
Views
¿Cómo pasar al historial en React Router v4?

En la versión actual de React Router (v3), puedo aceptar una respuesta del servidor y usar browserHistory.push para ir a la página de respuesta adecuada. Sin embargo, esto no está disponible en v4, y no estoy seguro de cuál es la forma adecuada de manejar esto.

En este ejemplo, al usar Redux, components/app-product-form.js llama a this.props.addProduct(props) cuando un usuario envía el formulario. Cuando el servidor devuelve un éxito, se lleva al usuario a la página del carrito.

 // actions/index.js export function addProduct(props) { return dispatch => axios.post(`${ROOT_URL}/cart`, props, config) .then(response => { dispatch({ type: types.AUTH_USER }); localStorage.setItem('token', response.data.token); browserHistory.push('/cart'); // no longer in React Router V4 }); }

¿Cómo puedo hacer una redirección a la página del carrito desde la función para React Router v4?

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Puede utilizar los métodos de history fuera de sus componentes. Prueba de la siguiente manera.

Primero, cree un objeto de history usando el paquete de historial :

 // src/history.js import { createBrowserHistory } from 'history'; export default createBrowserHistory();

Luego envuélvalo en <Router> ( tenga en cuenta que debe usar import { Router } en lugar de import { BrowserRouter as Router } ):

 // src/index.jsx // ... import { Router, Route, Link } from 'react-router-dom'; import history from './history'; ReactDOM.render( <Provider store={store}> <Router history={history}> <div> <ul> <li><Link to="/">Home</Link></li> <li><Link to="/login">Login</Link></li> </ul> <Route exact path="/" component={HomePage} /> <Route path="/login" component={LoginPage} /> </div> </Router> </Provider>, document.getElementById('root'), );

Cambia tu ubicación actual desde cualquier lugar, por ejemplo:

 // src/actions/userActionCreators.js // ... import history from '../history'; export function login(credentials) { return function (dispatch) { return loginRemotely(credentials) .then((response) => { // ... history.push('/'); }); }; }

UPD : también puede ver un ejemplo ligeramente diferente en las preguntas frecuentes de React Router .

over 4 years ago · Santiago Trujillo Report

0

React Router v4 es fundamentalmente diferente de v3 (y anterior) y no puede hacer browserHistory.push() como solía hacerlo.

Esta discusión parece relacionada si quieres más información:

  • La creación de un nuevo browserHistory no funcionará porque <BrowserRouter> crea su propia instancia de historial y escucha los cambios en eso. Entonces, una instancia diferente cambiará la URL pero no actualizará el <BrowserRouter> .
  • browserHistory no está expuesto por react-router en v4, solo en v2.

En su lugar, tiene algunas opciones para hacer esto:

  • Use el componente de orden alto withRouter

    En su lugar, debe usar el componente de orden alto withRouter y envolverlo en el componente que pasará al historial. Por ejemplo:

     import React from "react"; import { withRouter } from "react-router-dom"; class MyComponent extends React.Component { ... myFunction() { this.props.history.push("/some/Path"); } ... } export default withRouter(MyComponent);

    Consulte la documentación oficial para obtener más información:

    Puede obtener acceso a las propiedades del objeto de history y la match de <Route> más cercana a través del componente de orden superior withRouter. withRouter volverá a renderizar su componente cada vez que cambie la ruta con los mismos accesorios que <Route> render props: { match, location, history } .


  • Usar la API de context

    Usar el contexto puede ser una de las soluciones más fáciles, pero al ser una API experimental, es inestable y no tiene soporte. Úselo solo cuando todo lo demás falla. Aquí hay un ejemplo:

     import React from "react"; import PropTypes from "prop-types"; class MyComponent extends React.Component { static contextTypes = { router: PropTypes.object } constructor(props, context) { super(props, context); } ... myFunction() { this.context.router.history.push("/some/Path"); } ... }

    Eche un vistazo a la documentación oficial sobre el contexto:

    Si desea que su aplicación sea estable, no use context. Es una API experimental y es probable que se rompa en futuras versiones de React.

    Si insiste en usar el contexto a pesar de estas advertencias, intente aislar su uso del contexto en un área pequeña y evite usar la API de contexto directamente cuando sea posible para que sea más fácil actualizar cuando cambie la API.

over 4 years ago · Santiago Trujillo Report

0

Ahora, con react-router v5, puede usar el enlace useHistory de esta manera:

 import { useHistory } from "react-router-dom"; function HomeButton() { let history = useHistory(); function handleClick() { history.push("/home"); } return ( <button type="button" onClick={handleClick}> Go home </button> ); }

lea más en: https://reacttraining.com/react-router/web/api/Hooks/usehistory

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!