Próbuję załadować widok szczegółów na podstawie trasy reaktora-routera-dom, który powinien pobrać parametr URL (id) i użyć go do dalszego wypełnienia komponentu.
Moja trasa wygląda /task/:id
i mój komponent ładuje się dobrze, dopóki nie spróbuję pobrać: id z adresu URL w następujący sposób:
import React from "react";
import { useParams } from "react-router-dom";
class TaskDetail extends React.Component {
componentDidMount() {
let { id } = useParams();
this.fetchData(id);
}
fetchData = id => {
// ...
};
render() {
return <div>Yo</div>;
}
}
export default TaskDetail;
Powoduje to następujący błąd i nie jestem pewien, gdzie poprawnie zaimplementować useParams ().
Error: Invalid hook call. Hooks can only be called inside of the body of a function component.
Dokumenty pokazują tylko przykłady oparte na komponentach funkcjonalnych, a nie oparte na klasach.
Dzięki za pomoc, jestem nowy, aby zareagować.
reactjs
react-router
Jorre
źródło
źródło
useParams
? Może zmienisz to wHOC
?Odpowiedzi:
Możesz użyć tego
withRouter
do osiągnięcia. Wystarczy owinąć wyeksportowany sklasyfikowany komponent wewnątrz,withRouter
a następnie można użyć,this.props.match.params.id
aby uzyskać parametry zamiast używaćuseParams()
. Można również uzyskać dowolnylocation
,match
lubhistory
informacji za pomocąwithRouter
. Wszystkie są przekazywane poniżejthis.props
Na twoim przykładzie wyglądałoby to tak:
Proste!
źródło
Parametry przekazywane są przez rekwizyty na obiekcie dopasowania.
źródło: https://redux.js.org/advanced/usage-with-react-router
Oto przykład z dokumentów niszczących rekwizyty w argumentach.
źródło
Ponieważ haki nie będą działać z komponentami opartymi na klasach, możesz zawinąć je w funkcję i przekazać właściwości:
Ale, jak powiedział @ michael-mayo, oczekuję, że
withRouter
już to działa.źródło
Nie można wywołać hooka, takiego jak „useParams ()” z React.Component.
Najłatwiejszym sposobem, jeśli chcesz użyć haków i mieć istniejący reagować.Komponent jest utworzenie funkcji, a następnie wywołanie React.Component z tej funkcji i przekazanie parametru.
Twoja zmiana trasy będzie nadal taka
wtedy będziesz mógł pobrać identyfikator z rekwizytów w swoim komponencie reagowania
źródło
Spróbuj czegoś takiego
źródło
Za pomocą routera 5.1 można uzyskać identyfikator za pomocą:
i twój komponent niż może uzyskać dostęp do id:
źródło