Entonces, en mi aplicación, se supone que mi botón configura mis datos y luego navega a la página siguiente. El problema aquí es que los datos no se actualizan lo suficientemente rápido (creo). La consola muestra nulo (que son los datos iniciales que configuré), luego navega a la página siguiente con los datos nulos. Si vuelvo a la página anterior y luego vuelvo a la página siguiente, llevará los datos anteriores que no se enviaron antes. Intenté setTimeout pero supongo que es una forma incorrecta de usar setTimeout.
const [foto, setFoto] = useState(null); const sendQUtest = () => { setFoto('QUtest'); setTimeout(() => { console.log('assessmentTimeout: ' + foto); }, 5000); console.log('assessment: ' + foto); navigator.navigate('pembayaranAssessment', foto); }; const sendTOPtest = () => { setFoto('TOPtest'); console.log('assessment: ' + foto); navigator.navigate('pembayaranAssessment', foto); };Me pregunto si de todos modos hay que esperar los datos. La solución que vi en otras preguntas es usar useEffect, pero en este lo necesito después de onPress.
usestate es asíncrono y realmente no puede hacer una función de espera para ello, hay dos enfoques, uno de ellos está usando useEffect gancho como el siguiente, puede tener múltiples useEffect en una función use useEffect para verificar cuándo cambia el valor y luego navegar
const [foto, setFoto] = useState(null); useEffect(()=>{ //this will fire at the beginning and on foto changing value if(foto == null){ //will ignore first run }else{ navigator.navigate('pembayaranAssessment', foto); }},[foto]) const sendQUtest = () => { setFoto('QUtest'); setTimeout(() => { console.log('assessmentTimeout: ' + foto); }, 5000); console.log('assessment: ' + foto); //navigator.navigate('pembayaranAssessment', foto); }; const sendTOPtest = () => { setFoto('TOPtest'); console.log('assessment: ' + foto); // navigator.navigate('pembayaranAssessment', foto); };SÍ setstate tardará un tiempo en actualizarse , puede enviar datos directamente a su función de navegación
navigator.navigate('pembayaranAssessment', 'TOPtest');
Prueba de esta manera
const sendQUtest = () => { setFoto('QUtest'); setTimeout(() => { navigator.navigate('pembayaranAssessment', foto); // add here }, 200); }; const sendTOPtest = () => { setFoto('TOPtest'); setTimeout(() => { navigator.navigate('pembayaranAssessment', foto); // add here }, 200); };