好的是,我试图访问代码的.replace()
函数中的renderRow()
方法。
我从HubSpot API获取一些信息,但有些图像保存为http而不是https,这当然会使iOS无法加载图像。我没有更改我的Info.plist来接受不安全的请求(我不希望Apple有任何理由拒绝我的应用),我只想调用.replace()
方法并将http更改为https。 / p>
如果我在我的代码中将此方法称为任何地方,它可以完美地运行,但是当我在renderRow()
函数中调用它时,它会给我这个错误:
这是一段代码:
renderRow(post) {
var datePosted = new Date(post.publish_date).toString();
return(
<TouchableHighlight underlayColor='transparent' onPress={() => this.onPostPress(post)}>
<View style={styles.row}>
<Image style={styles.image} source={{uri: post.featured_image.replace(/^http:\/\//i, 'https://')}} /> {/* Here's the error */}
<View style={styles.info}>
<Text style={styles.title}>{post.title}</Text>
<Text style={styles.author}>Por {post.author_name}</Text>
<Text style={styles.date}>{datePosted.substr(4,11)}</Text>
<Text numberOfLines={3} style={styles.description}>{post.meta_description}..</Text>
</View>
</View>
</TouchableHighlight>
);
}
render() {
return(
<ListView
dataSource={this.state.dataSource}
renderRow={this.renderRow.bind(this)}
style={styles.page}
/>
);
}
请注意我正确绑定(this)
。
我该怎么办?提前谢谢。
修改
post.featured_image
已定义。以下是当我不尝试使用替换时会发生的事情:
正如我所说,有些图片正在显示,而有些图片则显示,因为有些图片是 https (显示的图片),而其他图片则是 http 不显示)。这就是我需要使用replace()
的原因。
答案 0 :(得分:0)
加载API时存在某种延迟,因此首先字符串为undefined
,然后加载来自API的信息。我只是添加了一个条件,所以如果字符串是undefined
,它不会尝试做任何事情。它现在解决了。谢谢!
最终代码:
if(post.featured_image != undefined) {
var imageHttps = post.featured_image.replace(/^http:\/\//i, 'https://');
}
感谢大家的帮助。