【问题标题】:React native : Deleting the right item from ListVIewReact native:从 ListVIew 中删除正确的项目
【发布时间】:2016-07-14 01:55:16
【问题描述】:

我在 Android 上使用 React Native (0.29.0) 并在我的页面上有一个 ListView 组件。我希望能够从列表中删除项目。我是 react-native 的新手。

这是 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 方法,再次,它说密钥“未定义” "

我发现很难确定需要从 deleteItem 方法中删除哪一行。如果有人能引导我走上正确的道路,这将非常有帮助,在此先感谢。

【问题讨论】:

    标签: listview react-native


    【解决方案1】:

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

    你需要做的:

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

    () => 创建一个函数,所以调用 onPress 时会调用 this.deleteItem(rowData, sectionID, rowID)

    【讨论】:

    • 非常感谢,它解决了我的问题,我不知道我必须使用 () => 创建一个方法才能传递参数。
    • 没问题,是的,您需要这样做。因为否则将不会使用任何参数调用 deleteItem 方法。 onPress 属于你的 组件,它与列表视图无关。
    猜你喜欢
    • 1970-01-01
    • 2017-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多