Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

233
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda