Meer
Hoe push je naar de geschiedenis in React Router v4?
In de huidige versie van React Router (v3) kan ik een server response accepteren en browserHistory.push
gebruiken om naar de juiste reactiepagina te gaan. Dit is echter'niet beschikbaar in v4, en ik'ben niet zeker wat de juiste manier is om dit af te handelen.
In dit voorbeeld, met behulp van Redux, components/app-product-form.js roept this.props.addProduct(props)
aan wanneer een gebruiker het formulier indient. Wanneer de server een succes retourneert, wordt de gebruiker naar de winkelwagen pagina gebracht.
// 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
});
}
Hoe kan ik een redirect maken naar de Cart pagina vanuit functie voor React Router v4?
316
3
React Router v4 is fundamenteel anders dan v3 (en eerder) en je kunt niet
browserHistory.push()
doen zoals je gewend was.Deze discussie lijkt gerelateerd als je meer info wilt:
In plaats daarvan heb je een paar opties om dit te doen:
Gebruik de
withRouter
hoge-orde componentIn plaats daarvan moet je de
withRouter
hoge orde component gebruiken, en die wikkelen naar de component die naar de geschiedenis zal pushen. Bijvoorbeeld:Bekijk de officiële documentatie voor meer info:
Gebruik de
context
APIDe context gebruiken is misschien een van de gemakkelijkste oplossingen, maar omdat het een experimentele API is, is hij onstabiel en wordt hij niet ondersteund. Gebruik het alleen als al het andere faalt. Hier's een voorbeeld:
Kijk eens naar de officiële documentatie over context:
Dit is hoe ik het deed:
Gebruik
this.props.history.push('/cart');
om door te verwijzen naar winkelwagen pagina het zal worden opgeslagen in geschiedenis object.Veel plezier, Michael.
this.context.history.push
zal niet werken.Het is me gelukt om push zo werkend te krijgen: