Поскольку ваш код не завершен в вашем вопросе, я предполагаю, что ваш компонент SelectedLayout
может иметь TouchableOpacity
или что-то похожее на ручку нажатия (чтобы выбрать или удалить изображение). По сути, вы хотите изменить источник данных вашего Flatlist (т.е. массив this.state.imagesAddFile) из компонента SelectedLayout
.
Создайте функцию в компоненте, содержащем плоский список, который получает имя изображения (или URL-адрес изображения в зависимости от структуры вашего объекта изображения), и эта функция должна удалить это изображение из вашего состояния (imagesAddFile). Теперь передайте эту функцию в качестве опоры вашему SelectedLayout
и вызовите эту функцию из компонента SelectedLayout
в onPress вашего Touchable **** в SelectedLayout
. Вы можете использовать lodash методы, они очень удобны и хорошо написаны. (Вы бы много их использовали)
Ваш компонент может выглядеть примерно так:
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}
/>
)}
/>
)
Строка
_.filter(imagesAddFile,imageObj => imageObj.name !== imageName);
- это не что иное, как просто сокращение JSX внутри метода фильтра lodash, который принимает массив imagesAddFile, выполняет итерацию по нему и возвращает новый массив, удаляя объект изображения, имя которого равнона имя изображения. Пожалуйста, обратитесь к документу для уточнения.
В идеале вы должны сначала проверить, существует ли изображение в массиве или нет. Также я бы посоветовал не играть с именем изображения, использовать что-то уникальное, например, id или imageUrl