Estoy tratando de cargar una vista de detalles basada en una ruta react-router-dom que debería tomar el parámetro de URL (id) y usarlo para completar el componente.
Mi ruta se ve /task/:id
y mi componente se carga bien, hasta que trato de tomar el: id de la URL de esta manera:
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;
Esto desencadena el siguiente error y no estoy seguro de dónde implementar correctamente useParams ().
Error: Invalid hook call. Hooks can only be called inside of the body of a function component.
Los documentos solo muestran ejemplos basados en componentes funcionales, no basados en clases.
Gracias por su ayuda, soy nuevo para reaccionar.
reactjs
react-router
Jorre
fuente
fuente
useParams
? Tal vez convertirlo en unHOC
?Respuestas:
Puedes usar
withRouter
para lograr esto. Simplemente envuelva su componente clasificado exportado dentrowithRouter
y luego puede usarthis.props.match.params.id
para obtener los parámetros en lugar de usaruseParams()
. También puede obtener ningúnlocation
,match
ohistory
información utilizandowithRouter
. Todos pasan por debajothis.props
Usando su ejemplo se vería así:
¡Simple como eso!
fuente
Los parámetros se transmiten a través de accesorios en el objeto de coincidencia.
fuente: https://redux.js.org/advanced/usage-with-react-router
Aquí hay un ejemplo de los documentos que destruyen los accesorios en los argumentos.
fuente
Como los ganchos no funcionan con componentes basados en clases, puede envolverlos en una función y pasar las propiedades:
Pero, como dijo @ michael-mayo, espero que esto sea lo
withRouter
que ya está funcionando.fuente
No puede llamar a un enlace como "useParams ()" desde un React.Component.
La manera más fácil si desea usar ganchos y tener un react.component existente es crear una función y luego llamar al React.Component desde esa función y pasar el parámetro.
Su ruta de cambio seguirá siendo algo así como
entonces podrá obtener la identificación de los accesorios en su componente de reacción
fuente
Intenta algo como esto
fuente
Con react router 5.1 puede obtener la identificación con lo siguiente:
y su componente que puede acceder a la identificación:
fuente