Silently (warning) fail when <Image> source has empty uri

Summary: fixes #3127
Closes https://github.com/facebook/react-native/pull/3185

Reviewed By: @​svcscm

Differential Revision: D2507588

Pulled By: @nicklockwood
This commit is contained in:
Dral 2015-10-05 03:59:02 -07:00 committed by facebook-github-bot-4
parent 463b072dac
commit 95a4f441e0
3 changed files with 18 additions and 0 deletions

View File

@ -113,6 +113,14 @@ var Image = React.createClass({
render: function() { render: function() {
var source = resolveAssetSource(this.props.source); var source = resolveAssetSource(this.props.source);
// As opposed to the ios version, here it render `null`
// when no source or source.uri... so let's not break that.
if (source && source.uri === '') {
console.warn('source.uri should not be an empty string');
}
if (source && source.uri) { if (source && source.uri) {
var isNetwork = source.uri.match(/^https?:/); var isNetwork = source.uri.match(/^https?:/);
invariant( invariant(

View File

@ -19,6 +19,7 @@ var NativeModules = require('NativeModules');
var PropTypes = require('ReactPropTypes'); var PropTypes = require('ReactPropTypes');
var React = require('React'); var React = require('React');
var ReactNativeViewAttributes = require('ReactNativeViewAttributes'); var ReactNativeViewAttributes = require('ReactNativeViewAttributes');
var View = require('View');
var StyleSheet = require('StyleSheet'); var StyleSheet = require('StyleSheet');
var StyleSheetPropType = require('StyleSheetPropType'); var StyleSheetPropType = require('StyleSheetPropType');
@ -165,6 +166,11 @@ var Image = React.createClass({
var {width, height} = source; var {width, height} = source;
var style = flattenStyle([{width, height}, styles.base, this.props.style]) || {}; var style = flattenStyle([{width, height}, styles.base, this.props.style]) || {};
if (source.uri === '') {
console.warn('source.uri should not be an empty string');
return <View {...this.props} style={style} />;
}
var isNetwork = source.uri && source.uri.match(/^https?:/); var isNetwork = source.uri && source.uri.match(/^https?:/);
var RawImage = isNetwork ? RCTNetworkImageView : RCTImageView; var RawImage = isNetwork ? RCTNetworkImageView : RCTImageView;
var resizeMode = this.props.resizeMode || (style || {}).resizeMode || 'cover'; // Workaround for flow bug t7737108 var resizeMode = this.props.resizeMode || (style || {}).resizeMode || 'cover'; // Workaround for flow bug t7737108

View File

@ -95,6 +95,10 @@ RCT_EXPORT_MODULE()
progressBlock:(RCTImageLoaderProgressBlock)progressBlock progressBlock:(RCTImageLoaderProgressBlock)progressBlock
completionBlock:(RCTImageLoaderCompletionBlock)completionBlock completionBlock:(RCTImageLoaderCompletionBlock)completionBlock
{ {
if ([imageTag isEqualToString:@""]) {
RCTLogWarn(@"source.uri should not be an empty string <Native>");
return nil;
}
NSURL *requestURL = [RCTConvert NSURL:imageTag]; NSURL *requestURL = [RCTConvert NSURL:imageTag];
id<RCTImageURLLoader> loadHandler = [self imageURLLoaderForRequest:requestURL]; id<RCTImageURLLoader> loadHandler = [self imageURLLoaderForRequest:requestURL];
if (!loadHandler) { if (!loadHandler) {