Si te encuentras con algo que no entiendes puedes dejarnos un comentario y te ayudaremos rápidamente.
Solución:
Los problemas vienen de [email protected]
error interno de .
Una solución rápida es revertir este compromiso: https://github.com/facebook/react-native/commit/31980094107ed37f8de70972dbcc319cc9a26339#diff-9a034658197479288c4d346a0eb4d98c
Después de revertir manualmente este compromiso en node_modules
vuelva a compilar la aplicación y la carga de imágenes funcionará sin problemas.
Reemplazar la función loadImageForURL
en /Libraries/Image/RCTLocalAssetImageLoader.mm
con lo siguiente:
- (RCTImageLoaderCancellationBlock)loadImageForURL:(NSURL *)imageURL
size:(CGSize)size
scale:(CGFloat)scale
resizeMode:(RCTResizeMode)resizeMode
progressHandler:(RCTImageLoaderProgressBlock)progressHandler
partialLoadHandler:(RCTImageLoaderPartialLoadBlock)partialLoadHandler
completionHandler:(RCTImageLoaderCompletionBlock)completionHandler
__block auto cancelled = std::make_shared>(false);
RCTExecuteOnMainQueue(^
if (cancelled->load())
return;
UIImage *image = RCTImageFromLocalAssetURL(imageURL);
if (image)
if (progressHandler)
progressHandler(1, 1);
completionHandler(nil, image);
else
NSString *message = [NSString stringWithFormat:@"Could not find image %@", imageURL];
RCTLogWarn(@"%@", message);
completionHandler(RCTErrorWithMessage(message), nil);
);
return ^
cancelled->store(true);
;
Este problema está solucionado en 0.63.3 ✅
Tengo el mismo problema que es perfectamente reproducible en uno de los iPhone 7 en mi proyecto nativo de reacción. Es extraño, pero otro iPhone 7 funciona perfectamente, así como todos los dispositivos Android.
Mi código:
formdata.append("file", uri: photo.uri, name: name_img, type: 'image/jpeg' );
axios(
url: `$API$'/upload'`,
method: 'post',
headers:
'Authorization': 'Basic ' + auth_token,
'Content-Type':'application/x-www-form-urlencoded'
,
data: formdata
).then(response => this.saveRoute())
.catch(err =>
this.props.errorMessage(message: err)
})
Pocas cosas que investigo:
- No pude detectarlo en el modo de depuración (¿las costuras están mal en las llamadas asíncronas?)
- No pude atraparlo con
try-catch
declaración pero costuras sucedió en llamada Axios.
Entonces, traté de jugar con Timeout y pude hacerlo totalmente irreproducible con Tiempo de espera de 300 ms antes de la llamada de Axios.
formdata.append("file", uri: photo.uri, name: name_img, type: 'image/jpeg' );
setTimeout(() =>
axios(
url: `$API$'/upload'`,
method: 'post',
headers:
'Authorization': 'Basic ' + auth_token,
'Content-Type':'application/x-www-form-urlencoded'
,
data: formdata
).then(response => this.saveRoute())
.catch(err =>
this.props.errorMessage(message: err)
})
, 300);
Sé que es una solución alternativa, pero puede ayudar a otros a comprender el problema para una investigación más profunda.
Si te ha sido útil este artículo, sería de mucha ayuda si lo compartes con otros programadores de esta forma contrubuyes a extender esta información.