J'essaie de charger une vue de détails basée sur une route react-router-dom qui devrait saisir le paramètre URL (id) et l'utiliser pour remplir davantage le composant.
Mon itinéraire ressemble /task/:id
et mon composant se charge correctement, jusqu'à ce que j'essaye de saisir l'identifiant: id de l'URL comme suit:
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;
Cela déclenche l'erreur suivante et je ne sais pas où implémenter correctement useParams ().
Error: Invalid hook call. Hooks can only be called inside of the body of a function component.
Les documents ne montrent que des exemples basés sur des composants fonctionnels, et non sur des classes.
Merci pour votre aide, je suis nouveau pour réagir.
reactjs
react-router
Jorre
la source
la source
useParams
? Peut-être le transformer en unHOC
?Réponses:
Vous pouvez utiliser
withRouter
pour accomplir cela. Enveloppez simplement votre composant classé exporté à l'intérieur dewithRouter
et ensuite vous pouvez utiliserthis.props.match.params.id
pour obtenir les paramètres au lieu d'utiliseruseParams()
. Vous pouvez également obtenir unelocation
,match
ou d'history
informations à l'aidewithRouter
. Ils sont tous passés sousthis.props
En utilisant votre exemple, cela ressemblerait à ceci:
Aussi simple que cela!
la source
Les paramètres sont transmis via les accessoires sur l'objet de correspondance.
source: https://redux.js.org/advanced/usage-with-react-router
Voici un exemple des documents détruisant les accessoires dans les arguments.
la source
Étant donné que les hooks ne fonctionnent pas avec les composants basés sur une classe, vous pouvez l'encapsuler dans une fonction et transmettre les propriétés:
Mais, comme l'a dit @ michael-mayo, je pense que c'est ce
withRouter
qui fonctionne déjà.la source
Vous ne pouvez pas appeler un hook tel que "useParams ()" à partir d'un React.Component.
Le moyen le plus simple si vous souhaitez utiliser des hooks et avoir un react.component existant est de créer une fonction, puis d'appeler le React.Component à partir de cette fonction et de passer le paramètre.
Votre itinéraire de commutation sera toujours quelque chose comme
alors vous pourrez obtenir l'id à partir des accessoires de votre composant React
la source
Essayez quelque chose comme ça
la source
Avec react router 5.1, vous pouvez obtenir l'identifiant avec les éléments suivants:
et votre composant qui peut accéder à id:
la source