Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

263
Views
¿Cómo obtener y manipular datos justo cuando se monta el componente?

Tengo un pequeño problema al tratar de obtener y filtrar algunos datos cuando se monta un componente. Básicamente, lo que estoy tratando de hacer es obtener algunos datos aleatorios y luego filtrarlos con una condición. pero el filtrado de los datos no funciona, lo más probable es que haya una parte que no entendí bien al usar useEffect. Hice una muestra de código donde simplifiqué y reproduje el problema en https://codesandbox.io/s/green-night-rhg4lj?file=/src/App.js

Cuando presiono el botón, espero que los datos filtrados se registren en la consola, pero solo me da una matriz vacía. Intenté agregar "filteredData" o "fechedData" como una dependencia de useEffect, y sí, me ayuda a obtener los datos filtrados justo al principio, pero entran en un bucle sin fin debido al comportamiento de las dependencias useEffect con obj y matrices. ¿Alguien conoce una forma de obtener los datos de API/Base de datos y filtrarlos directamente en el montaje sin entrar en un bucle de recuperación?

Aquí también está el código escrito al lado de codesandbox:

 import axios from "axios"; import { useState, useEffect, useCallback } from "react"; export default function App() { const [fetchedData, setFetchedData] = useState([]); const [filteredData, setFilteredData] = useState([]); const getData = useCallback(async () => { const { data } = await axios.get( "https://jsonplaceholder.typicode.com/posts" ); setFetchedData(data); }, []); useEffect(() => { getData(); (async () => { await setFilteredData(fetchedData.filter((p) => p.title.length > 20)); })(); }, []); const clickHandler = () => { console.log(filteredData); }; return ( <div className="App"> <button onClick={clickHandler}>Click</button> </div> ); }
about 4 years ago · Santiago Gelvez
1 answers
Answer question

0

¡Casi tienes razón!
Tenías razón al poner la solicitud en el gancho useEffect .

 ... const getData = useCallback(async () => { const { data } = await axios.get("https://jsonplaceholder.typicode.com/posts"); return data }, []); useEffect(async () => { const dataFromAPI = await getData(); setFilteredData(dataFromAPI.filter((p) => p.title.length > 20)); }, []); ...

En lugar de actualizar el estado en la función getData , simplemente devuélvalo.
En el useEffect obtienes esos datos y haces lo que quieras hacer allí.

nota: De acuerdo con esto , está bien usar async en useEffect

about 4 years ago · Santiago Gelvez Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!