2016-07-14 52 views
0

我在Android上使用React Native(0.29.0),并在我的页面上有一个ListView组件。我希望能够从列表中删除项目。我是相当新的反应原生。反应原生:从ListVIew删除正确的项目

这里是ListView的组件:

<ListView 
    key = {items} //An array of strings(same as the datasource) 
    dataSource = {this.state.datasource} 
    renderRow = {(rowData, sectionID, rowID) => <Item data={rowData} onPress={this.deleteItem}/>} 
/> 

下面是删除项目的方法,包括:

deleteItem(rowData, sectionID, rowID) 
{ 
    //items.splice(rowID ,1); 
    this.setState({datasource: ds.cloneWithRows(items)}); 
} 

使用ROWID删除一个项试过了,它从列表中删除所述第一元件和该列表被重新呈现。 使用console.warn检查rowID中的内容,表示它是“未定义的”。

我在网上阅读了几个类似的问题,他们说我需要使用一个密钥,我不完全确定如何使用密钥。尝试将密钥传递给deleteItem方法,它再次说,密钥是“ undefined“

我发现很难确定哪些行需要从deleteItem方法中删除。如果有人能指导我正确的路径,这将是非常有益的,在此先感谢。

回答

0

您需要将参数传递给onPress方法。你在一个元素上使用onPress,这个元素不知道它是否在列表中。所以组件不能传递任何有关它在列表中的位置的数据。

你需要做的:

renderRow = {(rowData, sectionID, rowID) => <Item data={rowData} onPress={() => this.deleteItem(rowData, sectionID, rowID)}/>} 

()=>创建了一个功能,所以当onPress被调用时会调用this.deleteItem(rowData,sectionID,ROWID)

+0

太感谢你了,它解决了我的问题,我不知道我必须使用()=>来创建一个方法来传递参数。 – Ajith

+0

没问题,是的,你需要这样做。因为否则deleteItem方法将不会被任何参数调用。 onPress属于你的组件,与listview无关。 – Jakkra