Altro
Come spingere alla cronologia in React Router v4?
Nella versione attuale di React Router (v3) posso accettare una risposta del server e usare browserHistory.push
per andare alla pagina di risposta appropriata. Tuttavia, questo non è disponibile nella v4, e non sono sicuro di quale sia il modo appropriato per gestire questo.
In questo esempio, usando Redux, components/app-product-form.js chiama this.props.addProduct(props)
quando un utente invia il modulo. Quando il server restituisce un successo, l'utente viene portato alla pagina del carrello.
// 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
});
}
Come posso fare un reindirizzamento alla pagina del carrello dalla funzione per React Router v4?
316
3
React Router v4 è fondamentalmente diverso dalla v3 (e precedenti) e non si può fare
browserHistory.push()
come si faceva prima.Questa discussione sembra correlata se vuoi maggiori informazioni:
Creare una nuova
browserHistory
non funzionerà perchécrea la sua istanza di storia, e ascolta i cambiamenti su quella. Quindi un'istanza diversa cambierà l'url ma non aggiornerà il
.browserHistory
non è esposta da react-router in v4, solo in v2.Invece hai alcune opzioni per farlo:
Utilizzare il componente di ordine superiore `withRouter
Invece si dovrebbe usare il componente di alto ordine
withRouter
, e avvolgerlo al componente che spingerà alla cronologia. Per esempio:Controlla la documentazione ufficiale per maggiori informazioni:
È possibile accedere alle proprietà dell'oggetto
history
e al ``'smatch
più vicino tramite il componente di ordine superiore withRouter. withRouter renderà nuovamente il suo componente ogni volta che la rotta cambia con gli stessi oggetti di scena di `` render:{ match, location, history }
.Usa l'API
context
.Usare il contesto potrebbe essere una delle soluzioni più semplici, ma essendo un'API sperimentale è instabile e non supportata. Usala solo quando tutto il resto fallisce. Ecco un esempio:
Date un'occhiata alla documentazione ufficiale su context:
Se vuoi che la tua applicazione sia stabile, non usare context. È un'API sperimentale ed è probabile che si rompa nelle future versioni di React.
Ecco come ho fatto:
Usa
this.props.history.push('/cart');
per reindirizzare alla pagina del carrello che sarà salvata nell'oggetto storia.Buon divertimento, Michael.
this.context.history.push
non funzionerà.Sono riuscito a far funzionare push in questo modo: