У меня есть FlatList для отображения галереи изображений, и у меня есть кнопка удаления, чтобы удалить элемент из FlatList. Я использовал методы сращивания и фильтрации для удаления выбранного элемента из состояния и обновления состояния после удаления из состояния.Но ни один из методов не работает.снова FlatList рендеринг одинаковых изображений.
constructor(props, context) {
super(props, context);
this.state = {
allmedia : [
{
photo:'4072710001_f36316ddc7_b.jpg',
caption: 'Grotto of the Madonna',
id : 1,
},
{
photo: /media/broadchurch_thumbnail.png,
caption: 'Broadchurch Scene',
id : 2,
},
{
photo:
'4052876281_6e068ac860_b.jpg',
caption: 'Beautiful Eyes',
id : 3,
},
],
}
}
удалить код:
let initialIndex = Math.max(0, currentIndex - 1);
let images = this.state.alldata;
let deletedImages = this.state.deletedData;
if (images.length > 0) {
/*
//slice method
let deletedImage = images.splice(currentIndex, 1); // 删掉选中的照片
deletedImages.push(deletedImage[0]); // push deletedImage
// update state
this.setState({
alldata: images,
deletedData: deletedImages,
})*/
//filter methid
const filteredData = this.state.alldata.filter(item => item.id !== currentIndex);
this.setState({ alldata: filteredData });
}
, где currentIndex
- текущее выбранное изображение
Примечание: МойПлоский список обернут другим компонентом, поэтому мой рендер выглядит следующим образом
render() {
const { alldata } = this.state;
return (
<View style={styles.container}>
<View style={{flex: 1}}>
<PhotoBrowser
mediaList={alldata}
enableGrid={true}
displayNavArrows={true}
displaySelectionButtons={true}
displayActionButton={true}
onActionButton={this.onActionButton}
displayTopBar = {true}
onSelectionChanged={this.handleSelection}
onTopRight={this._onTopRight}
topRightView={this._renderTopRightView()}
topRightStyle={{overflow: 'hidden'}}
startOnGrid={true}
initialIndex={0}
/>
</View>
</View>
)
}
При каждом удалении изображения alldata
обновляется с помощью setState, но изображения удаляются случайным образом, а не выбранный в данный момент элемент.Все говорят, что это о неизменяемости, но я не уверен, как это исправить, так как я новичок, чтобы реагировать на родной