Estoy usando react-native-vision-camera para capturar una imagen y verla dentro de un componente <Image> . El comportamiento esperado es actualizar la imagen después de capturar una nueva. Dado que la propiedad de source del componente <Image> apunta a una nueva imagen (con el mismo nombre Ok, pero aún así, es una nueva imagen).
Pero esto nunca sucede. Incluso cuando vuelvo a cargar la aplicación, <Image> aún muestra la imagen anterior. Tengo que cambiar el nombre de la nueva imagen.
Pensé que esto sucede porque tal vez el estado de la propiedad de source se actualiza antes de que react-native-vision-camera guarde la nueva imagen, por lo que el componente <Image> representa la imagen anterior, pero estoy usando async-await hasta donde yo sé , esto no debería pasar.
El código que escribí para la función de captura es
const [photoPath, setPhotoPath] = useState(""); const capture = async () => { const photo = await camera.current.takePhoto(); const path = RNFS.ExternalDirectoryPath + '/photo-X.jpg'; //when i update X (in the saved image name) with a new number, //<Image> views the correct image. await RNFS.moveFile(photo.path, path) setPhotoPath("file://" + path) }el codigo para ver la imagen
{ photoPath.length > 0 ? < Image source={{ uri: photoPath }} style={[styles.camera, { backgroundColor: 'black' }]} /> : null } Tengo un <Button> de captura que llama a la función capture() que actualiza el estado de photoPath que debería actualizar la source del componente <Image> y este proceso debería ver la nueva imagen. Pero esto nunca sucede, incluso después de recargar la aplicación. Tengo que elegir un nuevo nombre para la nueva imagen para que se pueda ver. ¿Por qué obtengo este comportamiento en lugar del que esperaba? ¿Qué tiene de malo mi código o mi comprensión y cuál es la solución correcta?
Después de un día de búsqueda y depuración, descubrí que <Image> , por una razón que desconozco, genera la imagen cobrada. Y dado que no hay una manera fácil de eliminar efectivo en react-native, esta es una solución alternativa que resolvió mi problema.
< Image source={{ uri: photoPath + "?" + new Date() }} style={[styles.camera, { backgroundColor: 'black' }]} />