Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
React native 从react native中的平面列表中删除项_React Native_React Native Flatlist - Fatal编程技术网

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={

我在react native中使用平面列表从库中选择多个图像。现在我想在上传到服务器之前删除一些图片。我不知道该怎么做

这是我的密码

<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中删除?我错误地提交了第一个答案,编辑了完整答案