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

245
Views
¿Cómo puedo sincronizar datos de dos consultas diferentes, donde una se transforma en useEffect?

Tengo una matriz y un mapa que se obtienen de dos consultas RTK diferentes. La matriz A contiene metadatos (Id) utilizados para acceder a los valores en el mapa B. Por lo tanto, su actualidad debe sincronizarse para que cada valor en B tenga alguna identificación en la matriz A.

Obtengo ambos datos del servidor, pero luego aplico algunos filtros al mapa B de modo que la cantidad de valores se reduzca potencialmente. Esto se hace así:

 const queryAResult = useRTKQueryA(); // arrayA = queryAResult.data const queryBResult = userRTKQueryB(); // mapB = queryBResult.data const [filteredMapB, setFilteredMapB] = useState({}); // UseEffect is used here because queryBResult changes as the query is refetched under the appropriate conditions. useEffect(() => { if (queryBResult.data) { const mapB = queryBResult.data; const filtered = filter(mapB); // Generic filter setFilteredMapB[filtered]; } }, [queryBResult.data]); // mapB = queryBResult.data // Here I render a component which is dependent on using arrayA to make accesses to filteredMapB.

El problema al que me enfrento es que, si bien puedo escuchar los resultados de la consulta tanto para arrayA como para mapB para asegurarme de que ambos estén disponibles (a través de datos, isLoading, isFetching, etc.), no estoy seguro de cómo asegurarme de que el proceso de filtrado en useEffect ha ocurrido antes de usar arrayA para acceder a filteredMapB. Actualmente, el problema ocurre porque utilizo la versión disponible más reciente de arrayA para acceder a filteredMapB (que no siempre es la más reciente, ya que el filtrado lleva tiempo), por lo que arrayA termina conteniendo elementos que no están en filteredMapB.

¿Cómo puedo sincronizar estos? Idealmente, la solución se prestaría bien a una expresión booleana que podría usar para representar condicionalmente la lista o un control giratorio de carga.

Pensé en poner ambas matrices en variables de estado locales y usar useCallback para crear captadores para las dos matrices que devolverían valores sincronizados usando la matriz de dependencia, pero preferiría una solución diferente.

about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

No usaría useEffect en absoluto aquí. Esto es algo en lo que useMemo resulta mucho más útil, ya que sucede de forma sincrónica y nunca tendrá un procesamiento intermedio.

 const queryAResult = useRTKQueryA(); // arrayA = queryAResult.data const queryBResult = userRTKQueryB(); // mapB = queryBResult.data const filteredMapB = useMemo(() => if (queryBResult.data) { const mapB = queryBResult.data; const filtered = filter(mapB); // Generic filter return filtered } }, [queryBResult.data]); // mapB = queryBResult.data if (!queryAResult || !filteredMapB) { return <Spinner /> } // normal rendering
about 4 years ago · Juan Pablo Isaza Report

0

parece que su ArrayA también está cambiando, así que tal vez incluya ArrayA en useEffect también en su caso.

about 4 years ago · Juan Pablo Isaza 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!