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

181
Views
¿Es una buena práctica usar React useEffect como oyente para activar la acción?

Tengo un componente ProgressBar para obtener el progreso. Me suscribo a dos eventos diferentes porque el usuario sube dos archivos diferentes. Cada evento devuelve el progreso de carga de cada archivo y luego combino estos dos progresos en uno solo y se lo muestro al usuario.

La pregunta es: tengo un useEffect que escucha estos otros dos progresos y cuando se actualizan, actualizo el progreso "final" sumando los valores o multiplicando por 2 si solo hay una fuente de progreso (porque el usuario puede subir solo un archivo). ¿Está bien usar useEffect así?

Código de componente:

 const ProgressBar = () => { const [progressVideo, setProgressVideo] = useState(0); const [progressData, setProgressData] = useState(0); const [progress, setProgress] = useState(0); useEffect(() => { window.electron.api.globals.ipcRenderer.on( "recorder:source1", (evt, message) => { console.log("message1 ", message.percent); setProgressVideo(message?.percent / 2); } ); window.electron.api.globals.ipcRenderer.on( "recorder:source2", (evt, message) => { console.log("message2 ", message.percent); setProgressData(message?.percent / 2); } ); }, []); useEffect(() => { if (isNaN(progressVideo) && isNaN(progressData)) return; const isSingleSourceVideo = isNaN(progressData); if (isSingleSourceVideo) { setProgress(progressVideo * 2); } else { setProgress(progressVideo + progressData); } }, [progressVideo, progressData]); return ( <div id={styles.progressBarWrapper}> <div id={styles.progressBarBackground}> <p>{parseInt(progress)}%</p> </div> <div id={styles.progressBar} style={{ width: parseInt(progress) + "%" }} ></div> </div> ); };
about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Es bueno siempre que limpie y elimine a los oyentes cuando hayan terminado.

 useEffect(() => { function calculate(evt, message){ console.log("Message", message.percent); setProgressVideo(message?.percent / 2); } window.electron.api.globals.ipcRenderer.on( "recorder:source1", calculate ); window.electron.api.globals.ipcRenderer.on( "recorder:source2", calculate ); return () => { window.electron.api.globals.ipcRenderer.removeListener( "recorder:source1", calculate ); window.electron.api.globals.ipcRenderer.removeListener( "recorder:source2", calculate ); } }, []);

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!