2016-05-22 11 views
2

私が書いているコードは、WordPress用です。ネイティブネットワークイメージに反応しません。

タイトル、カテゴリID、おすすめメディアIDの取得に成功しました。それから私はそれを表示する画像uriを取得しようとします。

有線のものです:ただし、投稿のタイトルとカテゴリIDと作成者IDが非常に高速になるたびに、load more(Gifted Listviewによって組み込まれています)を押すまで画像が表示されません。リクエストは "もっと読み込む"と "ListViewOnFresh"の両方で発生するため、このようにする必要があります。

イメージの開始と終了が終わるとconsole.logを使用して「読み込み開始」と「読み込み終了」を出力しようとしました。しかし、私はそれ以上の負荷を押すまでそれがロードされていないことがわかります。

ロードされても、リフレッシュする(ListViewOnRefreshを呼び出す)と、再び消えます。

私はdataRowsも出力しようとしましたが、何の問題もなく、featured_imageは正しいuriを表示しています。

私は本当にこれを解決できません。ご協力いただきありがとうございます。

var MovieListScreen = React.createClass({ 
    componentDidMount: function() { 
     Controllers.NavigationControllerIOS("movies_nav").setLeftButtons([{ 
      title: "Categories", 
      onPress: function() { 
       Controllers.DrawerControllerIOS("drawer").toggle({side:"left"}); 
      } 
     }]); 
    }, 



    renderListViewRow: function(row){ 
     return(
      <View > 
       <TouchableHighlight underlayColor={'#f3f3f2'} onPress={()=>this.selectRow(row)}> 
        <View style={styles.articleContainer}> 
         <View style={styles.rowDetailsContainer}> 
          <Image resizeMode="cover" style={styles.featuredImage} 
           source={{uri: row.featured_image}} 
           onLoadStart={() =>{console.log('start loading')}} 
           onLoadEnd={() => {console.log('loading finished')}} 
           /> 
          <Text style={styles.articleTitle}> 
            {row.title.rendered} 
           </Text> 
           <Text style={styles.articleTime} > 
            Posted by {row.author}, Category: {row.categories[0]} 
           </Text> 
           <Text style={styles.articleExcerpt}> 
            {row.excerpt.rendered} 
           </Text> 

          </View> 
         </View> 
        </TouchableHighlight> 
        <View style={styles.separator}/> 
        <View style={styles.articleActions}> 
         <Icon style={{flex:1}} name="share-alt" size={20} color="#0088CC" /> 
         <Icon style={{flex:1}} name="thumbs-o-up" size={20} color="#0088CC" /> 
         <Icon style={{flex:1}} name="star-o" size={20} color="#0088CC" /> 
         <View style={{flexDirection:'row',justifyContent:'center',alignItems:'center'}}><Icon style={{flex:1}} name="external-link" size={20} color="#0088CC" /><Text style={{fontSize:15,color:'#0088CC'}}> Read More</Text></View> 



        </View> 
       </View> 
      ); 
     }, 
     listViewOnRefresh: function(page, callback){ 
      var rowsData = []; 
      var REQUEST_URL = 'http://jo.wtf/wp-json/wp/v2/posts?per_page=10&order=asc&page='+page; 

      fetch(REQUEST_URL) 
      .then((response) => response.json()) 
      .then((responseData) => {responseData.map((obj)=>{ 
       fetch('http://jo.wtf/wp-json/wp/v2/media/'+obj.featured_media) 
       .then((responseMedia) => responseMedia.json()) 
       .then((responseDataMedia) => { 
        obj.featured_image= responseDataMedia.guid.rendered; 
       }) 
       rowsData.push(obj); 
       console.log(rowsData); 
      }) 
      callback(rowsData); 
      return; 
     }) 
     .done(); 
    }, 

    selectRow: function(row){ 
     var navigationController = Controllers.NavigationControllerIOS("movies_nav"); 
     navigationController.push({ 
      component: "PushedScreen", // the unique ID registered with AppRegistry.registerComponent (required) 
      backButtonTitle: "", // override the nav bar back button title for the pushed screen (optional) 
      backButtonHidden: false, // hide the nav bar back button for the pushed screen altogether (optional) 
     }); 
    }, 

    render: function() { 
     return (
      <RefreshableListView renderRow={(row)=>this.renderListViewRow(row)} 
       onRefresh={(page, callback)=>this.listViewOnRefresh(page, callback)} 
       backgroundColor={'#EFEFEF'} 
       style={styles.listview}/> 
     ); 
    }, 

}); 
+0

完全なコードはGitHubのhttps://github.com/JO-WTF/React-Native-Wordpressに –

答えて

0

は、私はあなたが追加すべきだと思う スタイル= {{幅:200、高さ:300}}自分のイメージタグ、私は別の方法でこの問題を解決した

+0

感謝を公開:

は、私が...ここにPHPのコードを挿入し、ここで見ることができないようです。私は2つのAPIコールを作成しているからです。私は単一のAPI呼び出しで必要なものすべてを出力するようにwordpressコードを変更しました。したがって、この問題は解決される。 –

+0

@Zhaoyu ZHONG素敵な仕事 –

0

へ 。

私はasync関数でコードを書き直そうとしましたが、どちらも役に立ちませんでした。私はそれが同時に2つのAPIコールによって引き起こされたと思うが、どうしてそれをすることはできない。

とにかく、サムネイルIDを取得してN個のAPIを呼び出してそれらのサムネイルのURLを取得したいので、私はwordpress APIを変更しました。

私のテーマにfunction.phpファイルにいくつかのコードを追加して解決しました。 http://jo.wtf/adding-extra-fields-to-wp-api-output/