Przede wszystkim, nie trzeba robić var r = this;
jak ten w if statement
odnosi się do kontekstu zwrotnego samego która od używasz funkcji strzałki odnosi się do React kontekście komponentu.
Zgodnie z docs:
Historia obiekty zazwyczaj mają następujące właściwości i metody:
więc podczas nawigowania można przekazać rekwizyty przejścia do obiektu historii jak
this.props.history.push({
pathname: '/template',
search: '?query=abc',
state: { detail: response.data }
})
lub podobnie dla komponentu łącza
<Link to={{
pathname: '/template',
search: '?query=abc',
state: { detail: response.data }
}}> My Link </Link>
a następnie w składniku, który jest renderowane z /template
trasa, można uzyskać dostęp do rekwizytów przekazanych jak
this.props.location.state.detail
Należy również pamiętać, że podczas korzystania z obiektów historii lub lokalizacji z podpór należy połączyć komponent z withRouter
.
Jak na Docs:
withRouter
można uzyskać dostępu do właściwości obiektu historii i najbliższego <Route>'s
meczu poprzez komponent withRouter
wyższego rzędu. withRouter
będzie ponownie renderował swój komponent za każdym razem, gdy zmieni się trasa z tymi samymi rekwizytami co <Route>
render props: { match, location, history }
.
Składnik, który jest renderowany przez 'Route' powinni mieć dostęp do' this.props.location', 'this.props.history', itp. Myślę, że nie musisz już używać 'ref' z v4. Spróbuj zrobić 'this.props.history.push ('/ template');' – saadq
To nie jest ref, to zmienna, która wskazuje na to; this.props.history.push ('/ template'); zabierz mnie na następną stronę, ale chcę przekazać im rekwizyty .ref = this; – IshanGarg
Próbujesz przekazać 'props' do komponentu pasującego do trasy? Myślę, że [ten wątek GitHub] (https://github.com/ReactTraining/react-router/issues/4105) rozwiązuje problem. – saadq