Listview React Native rowID给定错误undefined不是对象

Listview React Native rowID给定错误undefined不是对象,listview,react-native,Listview,React Native,我试图使一个列表视图充满按钮,如果你点击一个按钮,它会将该按钮上的信息发送到下一页。我已经成功地获得了正确的listview,并且按钮能够导航到下一页,但是我无法解决如何使用rowID来确定按下了哪个按钮。我有下面的代码,但由于某些原因rowID给出了一个错误undefined在单击它时不是一个对象,当我用一个数字(比如1)更改rowID时,它工作得很好,有什么想法吗 非常感谢 var woolworths = { 'title': "Woolworths", "descript

我试图使一个列表视图充满按钮,如果你点击一个按钮,它会将该按钮上的信息发送到下一页。我已经成功地获得了正确的listview,并且按钮能够导航到下一页,但是我无法解决如何使用rowID来确定按下了哪个按钮。我有下面的代码,但由于某些原因rowID给出了一个错误undefined在单击它时不是一个对象,当我用一个数字(比如1)更改rowID时,它工作得很好,有什么想法吗

非常感谢

    var woolworths = {
  'title': "Woolworths",
  "description":'"Lorem ipsum dolor sit amet, consectetur adipiscing elit,  sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."',
  'img': require('../assets/woolworths.jpg')
};

var checkers = {
  'title': "Checkers",
  "description":'"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."',
  'img': require('../assets/checkers.jpeg')
};

var picknpay = {
  'title': "Pick 'n Pay",
  "description":'"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit    anim id est laborum."',
  'img': require('../assets/picknpay.jpg')
};

var partners = [woolworths, checkers, picknpay];

class Partners extends React.Component{
  constructor(props){
    super(props)
    this._renderRow = this._renderRow.bind(this);
     this.gotoPartner = this.gotoPartner.bind(this);
    this.ds= new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !==     r2})
    this.state = {
      dataSource: this.ds.cloneWithRows(this._partners()),
    }
  }
  gotoPartner(rowID:number){
    this.props.navigator.push({
        title: partners[rowID].title,
        component: Partner,
         passProps: {partner:partners[0]},
         backButtonTitle: 'Back',
      });
  };

    _partners(){
      var dataBlob = []
      for (var ii = 0; ii < partners.length; ii++) {
        dataBlob.push(partners[ii].title);
      }
      return dataBlob;
    }


_renderRow(rowData, rowID){
  return(
    <View>
      <TouchableHighlight
                  style={styles.button}
                  onPress={() => this.gotoPartner(rowID)}
                  underlayColor='transparent'>
                    <View style={styles.textimgholder}
                    >
                        <Text style={styles.buttonTitle}>{rowData}</Text> 
                        <View style={styles.imgHolder}>
                            <Image source=            {require('../assets/arrowIcon.png')} 
                              style={styles.arrowIcon}/>
                        </View>
                    </View>
                </TouchableHighlight>
                <Separator />
    </View>
    )
}
  render () {
    return(
      <ScrollView style={styles.mainContainer}>
      <FullSep />
          <ListView
            dataSource={this.state.dataSource}
            renderRow={this._renderRow}
      />
        </ScrollView>

      )
  }
};
var woolworths={
“标题”:“伍尔沃思”,
“说明”:"知识本身是一种美德,是一种美德,是一种美德,是一种美德,是一种美德,是一种美德,是一种美德,是一种美德,是一种美德,是一种美德有时,如果你不自以为是,就必须为自己的行为负责。”,
“img”:要求(“../assets/woolworths.jpg”)
};
var检查程序={
'标题':“跳棋”,
“说明”:“知识本身是一种美德,是一种美德,是一种美德,是一种美德,是一种美德,是一种美德,是一种美德,是一种美德,是一种美德,是一种美德,是一种美德如果你不轻率,就必须为自己的行为负责。”,
“img”:需要(“../assets/checkers.jpeg”)
};
变量pickPay={
“标题”:“选择并支付”,
“说明”:“知识本身是一种美德,是一种美德,是一种美德,是一种美德,是一种美德,是一种美德,是一种美德,是一种美德,是一种美德,是一种美德,是一种美德如果你不轻率,就必须为自己的行为负责。”,
“img”:需要(“../assets/picknpay.jpg”)
};
var partners=[woolworths、checkers、PickPay];
类扩展React.Component{
建造师(道具){
超级(道具)
this.\u renderRow=this.\u renderRow.bind(this);
this.gotoPartner=this.gotoPartner.bind(this);
this.ds=新的ListView.DataSource({rowHasChanged:(r1,r2)=>r1!==r2})
此.state={
数据源:this.ds.cloneWithRows(this.\u partners()),
}
}
gotoPartner(rowID:number){
这个是.props.navigator.push({
标题:合作伙伴[rowID]。标题,
组成部分:合作伙伴,
passProps:{合作伙伴:合作伙伴[0]},
backButtonTitle:“返回”,
});
};
_合伙人(){
var-dataBlob=[]
对于(var ii=0;ii
{rowData}
)
}
渲染(){
返回(
)
}
};

看起来您正在调用
title:partners[rowID]。title
也许应该是
title:this.\u partners[rowID]。title
。其他一切对我来说都很好。

renderRow有四个参数:rowData、sectionID、rowID、highlightRow

renderRow(rowData, sectionID, rowID, highlightRow){
    return(
      <View>
        <TouchableHighlight
      style={styles.button}
      onPress={() => this.gotoPartner(rowID)}
  underlayColor='transparent'>
          <View style={styles.textimgholder}>
            <Text style={styles.buttonTitle}>{rowData}</Text> 
           </View>
       </TouchableHighlight>
     </View>
   )
}
renderRow(行数据、节ID、行ID、高亮行){
返回(
this.gotoPartner(rowID)}
underlayColor='transparent'>
{rowData}
)
}
如果需要获取rowID,则需要首先传入sectionID,然后传入rowID


我已经设置了一个工作版本,提醒合作伙伴[rowID]点击:

为什么您认为需要添加下划线?对不起,我想您可能没有在示例中发布所有代码。我看不出没有下划线的
partners
是在哪里定义的。我想我是在假设这是一个完整的示例。partners只是一个对象,我认为我所做的是直观的是的,我不想输入太多的代码,但我现在要添加。非常感谢,我不敢相信这就是我花了这么长时间试图解决的问题。很抱歉编辑问题和回答其他答案,直到现在才看到此答案