React native 从react native中的平面列表中删除项
我在react native中使用平面列表从库中选择多个图像。现在我想在上传到服务器之前删除一些图片。我不知道该怎么做 这是我的密码React native 从react native中的平面列表中删除项,react-native,react-native-flatlist,React Native,React Native Flatlist,我在react native中使用平面列表从库中选择多个图像。现在我想在上传到服务器之前删除一些图片。我不知道该怎么做 这是我的密码 <FlatList style={{ paddingBottom: 5, paddingTop: 10 }} data={this.state.imagesAddFile} keyExtractor={(y, z) => z.toString()} renderItem={
<FlatList
style={{ paddingBottom: 5, paddingTop: 10 }}
data={this.state.imagesAddFile}
keyExtractor={(y, z) => z.toString()}
renderItem={({ item }) => (
<SelectedLayout
ImageName = {item.name}
/>
)}
/>
z.toString()}
renderItem={({item})=>(
)}
/>
在这里,我得到了正确的图片列表,但不知道如何从列表中删除图片,请建议我的答案。谢谢我正在使用下面的删除功能,在这里共享所有代码: 步骤1:在添加TouchableOpacity中渲染视图,如下代码所示:
<TouchableOpacity onPress={() => this.deleteAddress(itemData.item._id)}>
<Icon name="trash" style={{paddingLeft: 10,paddingRight:10}} size={20} color="red" />
</TouchableOpacity>
deleteAddress(id) {
Alert.alert(
'Delete Address',
'Are you sure want to delete this address ?',
[
{text: 'Cancel', onPress: () => console.log('Cancel Pressed'), style: 'cancel'},
{text: 'OK', onPress: () => this.deleteAddressDetail(id)},
],
{ cancelable: false }
)
}
renderRowItem = (itemData) => {
<TouchableOpacity onPress={() => this.deleteAddress(itemData.item._id)}>
<Icon name="trash" style={{paddingLeft: 10,paddingRight:10}} size={20} color="red" />
</TouchableOpacity>
}
步骤3:在此处调用API或任何内容:
deleteAddressDetail(id) {
//Delete api or anything here
//after that call your list so updated state data will render
}
您的最新平面列表代码:
<FlatList
data={this.state.addressList}
keyExtractor={this._keyExtractor}
extraData={this.state}
renderItem={this.renderRowItem}
/>
使用如下代码所示的渲染项:
<TouchableOpacity onPress={() => this.deleteAddress(itemData.item._id)}>
<Icon name="trash" style={{paddingLeft: 10,paddingRight:10}} size={20} color="red" />
</TouchableOpacity>
deleteAddress(id) {
Alert.alert(
'Delete Address',
'Are you sure want to delete this address ?',
[
{text: 'Cancel', onPress: () => console.log('Cancel Pressed'), style: 'cancel'},
{text: 'OK', onPress: () => this.deleteAddressDetail(id)},
],
{ cancelable: false }
)
}
renderRowItem = (itemData) => {
<TouchableOpacity onPress={() => this.deleteAddress(itemData.item._id)}>
<Icon name="trash" style={{paddingLeft: 10,paddingRight:10}} size={20} color="red" />
</TouchableOpacity>
}
renderRowItem=(itemData)=>{
this.deleteAddress(itemData.item.\u id)}>
}
我正在使用类似以下方法的删除功能在此处共享所有代码:
步骤1:在添加TouchableOpacity中渲染视图,如下代码所示:
<TouchableOpacity onPress={() => this.deleteAddress(itemData.item._id)}>
<Icon name="trash" style={{paddingLeft: 10,paddingRight:10}} size={20} color="red" />
</TouchableOpacity>
deleteAddress(id) {
Alert.alert(
'Delete Address',
'Are you sure want to delete this address ?',
[
{text: 'Cancel', onPress: () => console.log('Cancel Pressed'), style: 'cancel'},
{text: 'OK', onPress: () => this.deleteAddressDetail(id)},
],
{ cancelable: false }
)
}
renderRowItem = (itemData) => {
<TouchableOpacity onPress={() => this.deleteAddress(itemData.item._id)}>
<Icon name="trash" style={{paddingLeft: 10,paddingRight:10}} size={20} color="red" />
</TouchableOpacity>
}
步骤3:在此处调用API或任何内容:
deleteAddressDetail(id) {
//Delete api or anything here
//after that call your list so updated state data will render
}
您的最新平面列表代码:
<FlatList
data={this.state.addressList}
keyExtractor={this._keyExtractor}
extraData={this.state}
renderItem={this.renderRowItem}
/>
使用如下代码所示的渲染项:
<TouchableOpacity onPress={() => this.deleteAddress(itemData.item._id)}>
<Icon name="trash" style={{paddingLeft: 10,paddingRight:10}} size={20} color="red" />
</TouchableOpacity>
deleteAddress(id) {
Alert.alert(
'Delete Address',
'Are you sure want to delete this address ?',
[
{text: 'Cancel', onPress: () => console.log('Cancel Pressed'), style: 'cancel'},
{text: 'OK', onPress: () => this.deleteAddressDetail(id)},
],
{ cancelable: false }
)
}
renderRowItem = (itemData) => {
<TouchableOpacity onPress={() => this.deleteAddress(itemData.item._id)}>
<Icon name="trash" style={{paddingLeft: 10,paddingRight:10}} size={20} color="red" />
</TouchableOpacity>
}
renderRowItem=(itemData)=>{
this.deleteAddress(itemData.item.\u id)}>
}
好吧,您可以根据所需项目的索引删除该项目。从修改平面列表开始
<FlatList
style={{ paddingBottom: 5, paddingTop: 10 }}
data={this.state.imagesAddFile}
keyExtractor={(y, z) => z.toString()}
renderItem={({ item,index }) => (
<SelectedLayout
onPress={(index) =>this.removeItemFromList(index)}
ImageName = {item.name}
/>
)}
/>
您可以根据所需项目的索引删除该项目
<FlatList
style={{ paddingBottom: 5, paddingTop: 10 }}
data={this.state.imagesAddFile}
keyExtractor={(y, z) => z.toString()}
renderItem={({ item,index }) => (
<SelectedLayout
onPress={(index) =>this.removeItemFromList(index)}
ImageName = {item.name}
/>
)}
/>
由于您的问题中的代码不完整,我假设您的
SelectedLayout
组件可能具有touchablepacity
或类似于handle tap(选择或删除图像)的内容。
基本上,您需要的是从SelectedLayout
组件修改Flatlist的数据源(即this.state.imagesAddFile数组)
在包含接收图像名称(或图像url,具体取决于图像对象的结构)的平面列表的组件中创建一个函数,该函数应将该图像从您的状态(imagesAddFile)中删除。现在将此功能作为道具传递给您的SelectedLayout
,并在按下可触摸****的SelectedLayout
中的SelectedLayout
组件时调用此功能。你可以使用方法,因为它们非常方便,而且写得很好。(你会经常使用它们)
您的组件可能如下所示:
handleImageTap = (imageName) => {
const { imagesAddFile } = this.state;
this.setState({
imagesAddFile: _.filter(imagesAddFile,imageObj =>
imageObj.name !== imageName);
})
}
render() {
return(
<FlatList
style={{ paddingBottom: 5, paddingTop: 10 }}
data={this.state.imagesAddFile}
keyExtractor={(y, z) => z.toString()}
renderItem={({ item }) => (
<SelectedLayout
ImageName = {item.name}
handleImageTap = {this.handleImageTap}
/>
)}
/>
)
只不过是一个JSX速记内部lodash filter方法,它获取imagesAddFile数组,对其进行迭代,并通过删除名称等于image name的image对象返回新数组。请参考文件,以便更好地澄清
理想情况下,您应该首先检查图像是否存在于数组中。另外,我建议不要使用图像名称,使用像id或imageUrl这样唯一的东西,因为您的问题中的代码不完整,我假设您的
SelectedLayout
组件可能有TouchableOpacity
或类似于手柄点击(选择或删除图像)的东西。
基本上,您需要的是从SelectedLayout
组件修改Flatlist的数据源(即this.state.imagesAddFile数组)
在包含接收图像名称(或图像url,具体取决于图像对象的结构)的平面列表的组件中创建一个函数,该函数应将该图像从您的状态(imagesAddFile)中删除。现在将此功能作为道具传递给您的SelectedLayout
,并在按下可触摸****的SelectedLayout
中的SelectedLayout
组件时调用此功能。你可以使用方法,因为它们非常方便,而且写得很好。(你会经常使用它们)
您的组件可能如下所示:
handleImageTap = (imageName) => {
const { imagesAddFile } = this.state;
this.setState({
imagesAddFile: _.filter(imagesAddFile,imageObj =>
imageObj.name !== imageName);
})
}
render() {
return(
<FlatList
style={{ paddingBottom: 5, paddingTop: 10 }}
data={this.state.imagesAddFile}
keyExtractor={(y, z) => z.toString()}
renderItem={({ item }) => (
<SelectedLayout
ImageName = {item.name}
handleImageTap = {this.handleImageTap}
/>
)}
/>
)
只不过是一个JSX速记内部lodash filter方法,它获取imagesAddFile数组,对其进行迭代,并通过删除名称等于image name的image对象返回新数组。请参考文件,以便更好地澄清
理想情况下,您应该首先检查图像是否存在于数组中。另外,我建议不要使用图像名称,使用像id或imageUrl这样唯一的东西。你能显示完整的平面列表吗?这样会更清楚@rahull你在RenderRow中执行的操作吗?谢谢。这是什么。keyExtractor?\u keyExtractor=(项,索引)=>index.toString();你能显示完整的平面列表吗?@rahull你在renderrow中执行的操作会更清楚,我知道了,谢谢。这是什么。keyExtractor?_keyExtractor=(项,索引)=>index.toString();如何在此函数removeItemFromList中删除?我错误地提交了第一个答案,编辑了完整答案。如何在此函数removeItemFromList中删除?我错误地提交了第一个答案,编辑了完整答案