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

158
Views
¿Existe un patrón de refactorización para evitar repeticiones infinitas debido a que los datos idénticos saltan perpetuamente de padre a hijo?

Imagine una parte simple de una aplicación React que consta de OuterComponent e InnerComponent dentro de ella. Hay instrucciones que estos componentes deben seguir:

  • Siempre que los data en OuterComponent cambien su valor, debe sobrescribir el valor actual de InnerComponent 's localData .
  • Cada vez que localData en InnerComponent cambia su valor, debe sobrescribir el valor actual de los data de OuterComponent .

Aquí está el código en cuestión:

 import React, { useEffect, useState } from "react"; const InnerComponent = ({ data = [], onChange = null }) => { const [localData, setLocalData] = useState([]); useEffect(() => { if (onChange) onChange(localData); }, [localData, onChange]); useEffect(() => { console.log("render"); setLocalData(data); }, [data]); return ( <div> {localData.map((e) => ( <div>{e}</div> ))} </div> ); }; const OuterComponent = () => { const [data, setData] = useState(["alice", "bob"]); return <InnerComponent data={data} onChange={setData} />; }; export default function App() { return ( <div className="App"> <OuterComponent /> </div> ); }

Dado que esta situación es algo que puede surgir en muchos casos y, por lo tanto, es típica, ¿existen formas tradicionales de refactorizar ese código en algo libre de posibles casos de representación infinita? También tengo curiosidad por saber si hay una manera si localData es una matriz mientras que data son un objeto que tiene esta matriz en una de sus claves que debe ser monitoreada por un componente secundario.

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

0

Sí, en tales casos, mantendría una referencia de los datos locales anteriores en el componente interno y agregaría una cláusula de protección, en el efecto de uso que llama a cambio, para probar contra los datos locales actuales, por ejemplo:

 const prevLocalData = useRef(localData); useEffect(() => { if (JSON.stringify(localData) === JSON.stringify(prevLocalData.current)) { return undefined; } onChange(localData); }, [localData, onChange])
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!