snippetreactCritical
How to push to History in React Router v4?
Viewed 0 times
reacthistoryrouterpushhow
Problem
In the current version of React Router (v3) I can accept a server response and use
In this example, using Redux, components/app-product-form.js calls
How can I make a redirect to the Cart page from function for React Router v4?
browserHistory.push to go to the appropriate response page. However, this isn't available in v4, and I'm not sure what the appropriate way to handle this is.In this example, using Redux, components/app-product-form.js calls
this.props.addProduct(props) when a user submits the form. When the server returns a success, the user is taken to the Cart page.// 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
});
}How can I make a redirect to the Cart page from function for React Router v4?
Solution
You can use the
First, create a
Then wrap it in `
// ...
import { Router, Route, Link } from 'react-router-dom';
import history from './history';
ReactDOM.render(
,
document.getElementById('root'),
);
// ...
import history from '../history';
export function login(credentials) {
return function (dispatch) {
return loginRemotely(credentials)
.then((response) => {
// ...
history.push('/');
});
};
}
`
UPD: You can also see a slightly different example in React Router FAQ.
history methods outside of your components. Try by the following way.First, create a
history object used the history package:// src/history.js
import { createBrowserHistory } from 'history';
export default createBrowserHistory();
Then wrap it in `
(please note, you should use import { Router } instead of import { BrowserRouter as Router }):
// src/index.jsx// ...
import { Router, Route, Link } from 'react-router-dom';
import history from './history';
ReactDOM.render(
- Home
- Login
,
document.getElementById('root'),
);
Change your current location from any place, for example:
// src/actions/userActionCreators.js// ...
import history from '../history';
export function login(credentials) {
return function (dispatch) {
return loginRemotely(credentials)
.then((response) => {
// ...
history.push('/');
});
};
}
`
UPD: You can also see a slightly different example in React Router FAQ.
Context
Stack Overflow Q#42701129, score: 405
Revisions (0)
No revisions yet.