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

163
Views
Los componentes nativos de React no se actualizan tan pronto como calculan

Tengo una lista de componentes en una pantalla. Cada componente hace un cálculo sobre useEffect. Entonces espero actualizar tan pronto como terminen cada cálculo, pero en cambio, todos se actualizan después de que se completan todos los cálculos.

¿Qué estoy haciendo mal?

Ejemplo de componente:

 import React, {useEffect, useState} from 'react'; import {View, Text} from 'react-native'; const Teste = () => { const Item = props => { const [tempo, setTempo] = useState('calculando...'); useEffect(() => { const inicio = new Date(); const rdm = Math.random(); sleep(rdm * 1000 + 2000); setTempo(`${new Date() - inicio} millisegundos`); }, []); const sleep = milliseconds => { const date = Date.now(); let currentDate = null; do { currentDate = Date.now(); } while (currentDate - date < milliseconds); }; return ( <View style={{marginBottom: 20}}> <Text>Item {props.nome}</Text> <Text>Tempo - {tempo}</Text> </View> ); }; return ( <View style={{padding: 40}}> <Item nome="1" /> <Item nome="2" /> <Item nome="3" /> </View> ); }; export default Teste;

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

0

Dos problemas aquí...

  1. Esa función de sleep , literalmente ni siquiera puedo
  2. Ha definido su componente Item dentro de su componente Teste , lo que significa que cada vez que Teste renderiza, Item se redefine

Sugiero mover Item fuera de Teste y usar un sueño basado en promesas

 const sleep = (ms) => { let timer; const promise = new Promise(r => { timer = setTimeout(r, ms); }); return [ promise, () => { clearTimeout(timer); } ]; }; const Item = ({ nome }) => { const [tempo, setTempo] = useState('calculando...'); useEffect(() => { const inicio = new Date(); const rdm = Math.random(); const [ delay, cancel ] = sleep(rdm * 1000 + 2000); delay.then(() => { setTempo(`${new Date() - inicio} millisegundos`); }); return cancel; // make sure timeout is cleared on unmount }, []); return ( <View style={{marginBottom: 20}}> <Text>Item {nome}</Text> <Text>Tempo - {tempo}</Text> </View> ); }; const Teste = () => ( <View style={{padding: 40}}> <Item nome="1" /> <Item nome="2" /> <Item nome="3" /> </View> );

Aquí sleep() devuelve tanto una promesa que se resuelve una vez que el tiempo de espera ha expirado como una función para cancelar el retraso si su componente está desmontado.

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!