2016-11-30 57 views
0

我正在嘗試用於Android的React Native(版本0.37.0),並試圖製作一個簡單的應用程序來學習。在成功製作Button進入下一頁之後,現在我希望用戶通過點擊ListView中的項目(比如點擊在線商店中的一個項目,然後進入下一頁,顯示項目信息)進入下一頁。這裏是我的代碼:爲什麼ListView中的TouchableHighlight不會讓我進入下一頁?

 <View> 

     // ListView 
     <ListView contentContainerStyle={styles.list} 
      dataSource={this.state.dataSource} 
      enableEmptySections={true} 
      renderRow={(rowData) => 
       <TouchableHighlight 
        style={styles.listviewContainer} 
        onPress={() => { 
         Alert.alert('kyaa'); 
         this.gotoItemPage.bind(this); 
        }} 
        > 
        <View> 
         /*some Text and Image*/ 
        </View> 
       </TouchableHighlight> 
      } 
     /> 

     // Button Add 
     <TouchableOpacity onPress={this.gotoItemPage.bind(this)} > 
      <Image 
      style={styles.button} 
      source={/*some source*/} 
      /> 
     </TouchableOpacity> 

     </View> 

在上面的代碼中有兩件事可點擊:ListView的item和Button Add。兩者都執行相同的方法。按鈕添加按預期工作,用戶在點擊時導航到下一頁。然而,當ListView的項目點擊時,它不會。顏色變化就像單擊按鈕時顯示Alert'kyaa'一樣,但不會進入下一頁(即使警報已刪除,仍然相同)。

我做錯了什麼?

回答

3

你是不是叫你的功能,你只是在結合它,你不需要做的,因爲你正在使用箭頭功能。你的回調應該是這樣的:

<TouchableHighlight 
        style={styles.listviewContainer} 
        onPress={() => { 
         Alert.alert('kyaa'); 
         this.gotoItemPage(); 
        }}> 
//... 

不會有什麼bind創建將具有範圍傳遞作爲第一個參數的東西(在這種情況下,你在哪裏實例行的組件)的新功能,但它不會調用函數本身。當從另一個函數調用時,箭頭函數不會替換範圍,因此您不需要執行任何類型的綁定。

+1

作爲解釋它爲什麼在Button中起作用的原因,你的函數將從Button本身調用,並且你正在傳遞一個對你想調用的函數的引用(綁定它以便你不會鬆動參考組件的範圍)。在ListView的情況下,你自己調用這個函數。 – martinarroyo

+0

不只是它的作品,我也明白爲什麼,並瞭解我需要了解更多。非常感謝你! :d – Konayuki

相關問題