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

303
Visualizações
¿Por qué tengo demasiados renderizados en mi React.useEffect()?

Todavía soy principiante usando ReactJS y no entiendo un problema que tengo.

Mi useEffect está obteniendo una lista de datos y luego hago un filter .

Pero cuando guardo el valor de los datos de este filtro, y con un console.log() trato de ver el valor de retorno de mi filtro, hay un ciclo infinito de datos guardados que se están cargando y no entiendo por qué sucede esto. .

Puede alguien ayudarme con esto?

Aquí está mi código y es más fácil entender lo que quiero decir:

Y puse mi código en codesandbox

impresión de console.log()

 import React, { useRef } from "react"; import { Map, TileLayer } from "react-leaflet"; import { getAccommodations } from "./data"; import "./styles.css"; const App = () => { const center = [-27.592495455704718, -48.484572875610034]; const mapRef = useRef(); const [thing, setThing] = React.useState(0); const [accommodationData, setAccommodationData] = React.useState([]); React.useEffect(() => { if (mapRef.current) { const response = getAccommodations(); const _response = response.filter((accommodation) => { return mapRef.current.leafletElement .getBounds() .contains([accommodation.listing.lat, accommodation.listing.lng]); }); setAccommodationData(_response); } }, [center, thing, accommodationData]); // I commented this line to avoid too many re-renders // console.log("accommodationData: ", accommodationData); return ( <Map ref={mapRef} style={{ width: "100%", height: "100vh" }} center={center} zoom={13} onmoveend={() => { setThing(thing + 1); }} > <TileLayer url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png" attribution='&copy; <a href="http://osm.org/copyright">OpenStreetMap</a> contributors' /> {/* I'll add some <Markers> here with the accommodationData array */} </Map> ); }; export default App;

Muchas gracias por adelantado

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

0

El gancho useEffect mantiene el gatillo porque está cambiando el estado de datos de alojamiento, que es una de las dependencias de useEffect . Entonces, solo tiene que eliminarlo de las dependencias o agregar otra respuesta de estado y luego cambiar los datos de alojamiento cuando tenga una respuesta , por ejemplo:

 const center = [-27.592495455704718, -48.484572875610034]; const mapRef = useRef(); const [thing, setThing] = React.useState(0); const [accommodationData, setAccommodationData] = React.useState([]); const [response, setResponse] = React.useState(null); React.useEffect(() => { if (mapRef.current && !response) { const response = getAccommodations(); const _response = response.filter((accommodation) => { return mapRef.current.leafletElement .getBounds() .contains([accommodation.listing.lat, accommodation.listing.lng]); }); setResponse(_response); } }, [center, thing, accommodationData]); React.useEffect(() => { if (response) setAccommodationData(_response); }, [response]);
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