无法在React Native中的renderRow()函数内使用javascript .replace()方法

时间:2017-05-14 23:10:26

标签: javascript ios react-native

好的是,我试图访问代码的.replace()函数中的renderRow()方法。

我从HubSpot API获取一些信息,但有些图像保存为http而不是https,这当然会使iOS无法加载图像。我没有更改我的Info.plist来接受不安全的请求(我不希望Apple有任何理由拒绝我的应用),我只想调用.replace()方法并将http更改为https。 / p>

如果我在我的代码中将此方法称为任何地方,它可以完美地运行,但是当我在renderRow()函数中调用它时,它会给我这个错误:

Error

这是一段代码:

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 已定义。以下是当我不尝试使用替换时会发生的事情:

Working

正如我所说,有些图片正在显示,而有些图片则显示,因为有些图片是 https (显示的图片),而其他图片则是 http 显示)。这就是我需要使用replace()的原因。

1 个答案:

答案 0 :(得分:0)

加载API时存在某种延迟,因此首先字符串为undefined,然后加载来自API的信息。我只是添加了一个条件,所以如果字符串是undefined,它不会尝试做任何事情。它现在解决了。谢谢!

最终代码:

if(post.featured_image != undefined) {
    var imageHttps = post.featured_image.replace(/^http:\/\//i, 'https://');
}

感谢大家的帮助。