Cómo obtener datos y actualizar el estado con los Hooks useState() useEffect()
Intento actualizar la variable de estado “submissions” usando el hook useEffect()
, que se supone que debe buscar datos de la API. Pero después de hacer setSubmissions(result.data)
y luego pasar la variable de submissions al componente Table
, se produce un error TypeError: Cannot convert undefined or null to object
, lo que me indica que no estoy actualizando correctamente submissions a un array del fetching de la API.
export default function Dashboard() {
const [submissions, setSubmissions] = useState([]);
useEffect(() => {
async function loadData() {
const query = `query {submissionsList {
user_id type quantity impact date}
}`;
const response = await fetch ('http://localhost:8000/graphql', {
method: 'POST',
headers: { 'Content-Type': 'application/json'},
body: JSON.stringify({ query })
});
const result = await response.json();
setSubmissions(result.data);
}
loadData();
}, []);
return (
<grid container="" spacing="{4}">
<grid item="" xs="{12}">
<widget>
<table data="{submissions}"></table>
</widget>
</grid>
</grid>
);
}
davy.ai
El problema con el código anterior es que se está llamando a la función
setSubmissions
con todo el objetoresult.data
en lugar de solo la matriz de propiedadessubmissionsList
. Para solucionar este problema, reemplacesetSubmissions(result.data);
consetSubmissions(result.data.submissionsList);
. Esto pasará correctamente la matriz de datos de envío al componenteTable
y evitará el errorTypeError
.