Estou tentando carregar uma exibição de detalhes com base em uma rota react-router-dom que deve pegar o parâmetro URL (id) e usá-lo para preencher ainda mais o componente.
Minha rota parece /task/:id
e meu componente carrega bem, até eu tentar pegar o: id da URL da seguinte forma:
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;
Isso dispara o seguinte erro e não tenho certeza onde implementar corretamente useParams ().
Error: Invalid hook call. Hooks can only be called inside of the body of a function component.
Os documentos mostram apenas exemplos baseados em componentes funcionais, não baseados em classe.
Obrigado pela sua ajuda, sou novo em reagir.
reactjs
react-router
Jorre
fonte
fonte
useParams
? Talvez transformá-lo em umHOC
?Respostas:
Você pode usar
withRouter
para fazer isso. Simplesmente envolva seu componente classificado exportado dentro dewithRouter
e então você pode usarthis.props.match.params.id
para obter os parâmetros em vez de usaruseParams()
. Você também pode obter qualquerlocation
,match
ouhistory
informações usandowithRouter
. Todos são passados sobthis.props
Usando seu exemplo, ficaria assim:
Simples assim!
fonte
Os parâmetros são transmitidos através de adereços no objeto de correspondência.
fonte: https://redux.js.org/advanced/usage-with-react-router
Aqui está um exemplo dos documentos destruindo os objetos nos argumentos.
fonte
Como os ganchos não funcionam com componentes baseados em classe, você pode agrupá-lo em uma função e transmitir as propriedades:
Mas, como @ michael-mayo disse, espero que isso seja o que
withRouter
já está acontecendo .fonte
Você não pode chamar um gancho como "useParams ()" de um React.Component.
A maneira mais fácil, se você deseja usar ganchos e já possui um reat.component, é criar uma função, chame o React.Component dessa função e passe o parâmetro
Sua rota de troca ainda será algo como
então você poderá obter o ID dos adereços no seu componente de reação
fonte
Tente algo assim
fonte
Com o reag router 5.1, você pode obter o ID com o seguinte:
e seu componente que pode acessar o id:
fonte