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

220
Visualizações
React Hook Form Demasiadas re-renderizaciones. React limita el número de renderizados para evitar un bucle infinito

Estoy tratando de ver un campo llamado partido. después de seleccionar esos campos, será necesario representar la lista de productos. Estoy usando el formulario de gancho de reacción donde usé el gancho de reloj para suscribirme al cambio.

 <FormProvider {...methods}> <form onSubmit={handleSubmit(onSubmit)}> <Select ref={ref} options={partyOptions} value={partyOptions.find( (c) => c.value === value )} onChange={(val: any) => onChange(val.value)} name={name} /> )} <div className="card-body row"> <ProductContext.Provider value={[product, setProduct]}> <ProductList partyId={partyId} /> </ProductContext.Provider> </div> </form>

En el componente de lista de productos, pasé partyId como accesorios e intenté acceder a la API de acuerdo con partyId

 export function ProductList({ partyId }: { partyId: any }) { const { control } = useFormContext(); // retrieve all hook methods const [productOptions, setProductOptions] = useState([] as any); const productQuery = useQuery("products", () => searchProduct(partyId), { enabled: partyId !== undefined, }); if (productQuery.isFetched) { setProductOptions( productQuery.data.data.map((d: any) => ({ value: d.id, label: d.name, })) ); }

Recibo Too many re-renders. React limits the number of renders to prevent an infinite loop. ¿Hay alguna solución para no renderizar varias veces?

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Debe agregar más lógica, setProductOptions se llama en cada procesamiento de reacción. Por ejemplo, puede usar useEffect para llamar a setProductOptions solo una vez.

 export function ProductList({ partyId }: { partyId: any }) { const { control } = useFormContext(); // retrieve all hook methods const [productOptions, setProductOptions] = useState([] as any); const productQuery = useQuery("products", () => searchProduct(partyId), { enabled: partyId !== undefined, }); useEffect(() => { if (productQuery.isFetched) { setProductOptions( productQuery.data.data.map((d: any) => ({ value: d.id, label: d.name, }) ) ); } }, [productQuery.isFetched, setProductOptions]);
about 4 years ago · Juan Pablo Isaza Relatório

0

Tu problema está aquí:

 if (productQuery.isFetched) { setProductOptions( productQuery.data.data.map((d: any) => ({ value: d.id, label: d.name, }) ) );

Cada vez que se procesa el componente, desencadena otra actualización de estado con setProductOptions , que luego provoca otro procesamiento y el ciclo se repite infinitamente. Considere usar un gancho useEffect en su lugar:

 useEffect(() => { if (productQuery.isFetched) { setProductOptions( productQuery.data.data.map((d: any) => ({ value: d.id, label: d.name, }) ) } }, [productQuery.isFetched);

Más información sobre useEffect está disponible aquí: https://reactjs.org/docs/hooks-effect.html

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