Как да натиснете в История в React Router v4?
В текущата версия на React Router (v3) мога да приема отговор от сървъра и да използвам browserHistory.push
, за да отида на съответната страница с отговор. Това обаче не е налично във версия 4 и не съм сигурен какъв е подходящият начин да се справя с това.
В този пример, използвайки Redux, components/app-product-form.js извиква this.props.addProduct(props)
, когато потребителят изпрати формуляра. Когато сървърът върне успех, потребителят се прехвърля на страницата на количката.
// 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
});
}
Как мога да направя пренасочване към страницата на количката от функция за React Router v4?
316
3
React Router v4 се различава коренно от v3 (и по-ранните версии) и не можете да правите
browserHistory.push()
както преди.Тази дискусия изглежда е свързана с нея, ако искате повече информация:
Вместо това имате няколко възможности за това:
Използвайте компонента от висок порядък
withRouter
Вместо това трябва да използвате компонента от висок порядък
withRouter
и да го обгърнете с компонента, който ще се изпраща към историята. Например:Вижте официалната документация за повече информация:
Използване на API
context
Използването на контекста може да е едно от най-лесните решения, но като експериментален API той е нестабилен и не се поддържа. Използвайте го само когато всичко останало се провали. Ето един пример:
Разгледайте официалната документация за контекста:
Ако искате приложението ви да е стабилно, не използвайте контекст. Това е експериментален API и има вероятност да се счупи в бъдещите версии на React.
Ето как го направих:
Използвайте
this.props.history.push('/cart');
, за да пренасочите към страницата на количката, която ще бъде запазена в обекта история.Наслаждавайте се, Майкъл.
this.context.history.push
няма да работи.Успях да накарам push да работи по следния начин: