Mam mały problem z migracją z React-Router v3 do v4. w wersji 3 mogłem to zrobić wszędzie:
import { browserHistory } from 'react-router';
browserHistory.push('/some/path');
Jak mogę to osiągnąć w v4.
Wiem, że mógłbym użyć withRouter
rekwizytów hoc , kontekstu reakcji lub routera zdarzeń, gdy jesteś w komponencie. ale tak nie jest w przypadku mnie.
Szukam równoważności NavigatingOutsideOfComponents w v4
reactjs
react-router
Storm_buster
źródło
źródło
Odpowiedzi:
Wystarczy mieć moduł eksportujący
history
obiekt. Następnie możesz zaimportować ten obiekt w całym projekcie.Wtedy zamiast używać jednego z wbudowanych routerów, użyjesz
<Router>
komponentu.źródło
createHashHistory
jeśli używaszHashRouter
.To działa! https://reacttraining.com/react-router/web/api/withRouter
źródło
this.props.history.push('/some_route');
żeby to zadziałało.const Component = props => {... // stuff}
iexport default withRouter(Component)
pracuje dla mnie nad składnikiem bezstanowymPodobnie do zaakceptowanej odpowiedzi, co możesz zrobić, to użyć
react
ireact-router
samego w celu dostarczeniahistory
obiektu, który możesz określić w pliku, a następnie wyeksportować.history.js
Następnie importujesz komponent i montujesz, aby zainicjować zmienną historii:
A potem możesz po prostu zaimportować do swojej aplikacji po jej zamontowaniu:
Zrobiłem nawet pakiet npm , który właśnie to robi.
źródło
Jeśli używasz redux i redux-thunk, najlepszym rozwiązaniem będzie reakcja-router-redux
źródło
Bazując na tej odpowiedzi, jeśli potrzebujesz obiektu historii tylko w celu przejścia do innego komponentu:
źródło
W App.js
Następnie w komponencie podrzędnym:
źródło
W konkretnym przypadku
react-router
użyciecontext
jest ważnym scenariuszem, npMożesz uzyskać dostęp do instancji historii poprzez kontekst routera, np
this.context.router.history
.źródło