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

367
Visualizações
Reaccionar: renderizado infinito en useEffect solo cuando se usa un componente interno

Tengo este siguiente código Parent y DataFilter .

Padre.js

 const Parent = () => { const [filteredData, setFilteredData] = useState() ... const Filter = () => { return ( <div> <h2>Filter your data</h2> <DataFilter data={filteredData} updateFilter={setFilteredData} /> <Result data={filteredData} /> </div> ) } return ( <div> <h1>Header</h1> <Filter /> </div> ) }

Filtro de datos.js

 const DataFilter = ({ data, updateFilter }) => { const [name, setName] = useState(defaultFilters.name) const [age, setAge] = useState(defaultFilters.age) ...(filter logic using data) useEffect(() => { updateFilter({ name, age }) }, [name, age]) }

Aquí, recibo Maximum update depth exceeded , también conocida como representación infinita, y sé por qué.

  1. Parent y DataFilter se procesan
  2. DataFilter activa useEffect de Parent en setFilteredData
  3. Parent se vuelve a representar debido a setFilteredData
  4. Parent elemento principal que se vuelve a renderizar activa el componente secundario DataFilter
  5. Repetir desde el No.2

Pero esto solo comenzó a suceder solo después de que extraje Filter en 'Parent' como un componente interno... Sé que es extraño, pero funcionaba bien cuando Parent estaba así

 const Parent = () => { const [filteredData, setFilteredData] = useState() ... return ( <div> <h1>Header</h1> <div> <h2>Filter your data</h2> <DataFilter data={filteredData} updateFilter={setFilteredData} /> <Result data={filteredData} /> </div> </div> ) }

¿Alguien sabe por qué la representación infinita ocurre solo cuando es un componente interno?

Intenté usar useCallback para setFilteredData pero no funcionó.

Además, ¿qué debo hacer para evitar el procesamiento infinito si quiero mantenerlo como un componente en lugar de escribir todo directamente en un retorno ()?

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

0

Tu razonamiento es correcto por lo que puedo deducir.

Para reformular:

Los componentes secundarios activan el setFilteredData del componente principal.

Cuando el estado cambia en el componente principal, el principal volverá a representar a sus hijos, lo que hará que <DataFilter> (junto con otros elementos secundarios) se vuelva a representar, lo que hace que useEffect se ejecute nuevamente ya que useEffect se ejecuta en cada representación.

Este proceso se repite, lo que hace que el estado del padre se actualice y se vuelva a representar. Y esto continúa en un bucle infinito.

Creo que la razón por la que funcionó con su estructura anterior se debió al anidamiento de los componentes, con los cambios de los padres solo actualizando los niños relevantes (a diferencia de la cadena más larga de anidamiento como su configuración actual).

Si desea que no se vuelva a renderizar siempre, mantendría la lógica relevante en el niño para que el niño sea responsable solo de su propio estado y se vuelva a renderizar, en lugar de que los cambios en el estado principal hagan que el niño se vuelva a renderizar. .

Alternativamente, buscaría envolver al niño en React.memo HOC, lo que limitará las re-renderizaciones dependiendo de los accesorios.

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