2017-05-14 14 views
0

의 renderRow() 함수에서 javascript .replace() 메서드를 사용할 수 없습니다. 따라서 코드의 renderRow() 함수 내에서 .replace() 메서드에 액세스하려고합니다.React Native

HubSpot API에서 일부 정보를 가져 오지만 일부 이미지는 https 대신 http로 저장되며 iOS는 이미지를로드하지 않습니다. Info.plist를 변경하여 (Apple이 내 앱을 거부 할 수있는 변명을하지 않게하려는) 불안한 요청을 수락하는 대신 .replace() 메서드를 호출하고 http를 https로 변경하고 싶습니다.

내 코드에서이 방법 어디를 호출 할 경우, 그것은 완벽하게 작동하지만, 나는 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)입니다.

어떻게해야합니까? 미리 감사드립니다.

EDIT

post.featured_image가 정의된다. 일부를 내가 어떤 이미지를 보여주고 일부는 HTTPS (보여주는 것)이기 때문에 일부는하지 않습니다 말했듯이

Working

과 : 여기가 대체 사용하려고하지 않을 때 일어나는 것이다 다른 사람은 http입니다 (이 아닌이 표시됩니다). 그래서 replace()을 사용해야합니다.

+0

'datePosted'에 대한 작업과 마찬가지로'.replace'를 호출하고 반환하기 전에 변수에 URI를 할당 해보십시오. –

+0

이렇게했습니다 :'var imageHttps = post.featured_image.replace (/^http : \/\) // i, 'https : //');', 여전히 같은 오류입니다. –

+0

'post.featured_image'의 값을 로깅 해 보았습니다. 즉. 'console.log ('image : ", post.featured_image' 만약 이것이 아직 정의되지 않았다면, 이런 종류의 에러를 보게 될 것입니다 .. –

답변

0

API가로드 될 때 지연이 발생하므로 먼저 문자열이 undefined이고 API의 정보가로드됩니다. 방금 조건을 추가하여 문자열이 undefined 인 경우 아무 것도 시도하지 않습니다. 이제 해결되었습니다. 감사!!

최종 코드 : 당신의 도움에 대한

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

감사합니다 여러분.