所以经过深思熟虑,我终于找到了解决办法。
我没有处理每个项目中的隐藏状态,而是列出了与我的平面列表所在的组件中的项目ID关联的每个隐藏状态,添加了一个函数,将以前打开的项目设置为隐藏并打开新的项目,并将其作为回调传递给我的项目,以便在我按下它们时可以调用它。
_onPress(id) {
let items;
items = this.state.items.map((item) => {
if (item.id === this.state.openId)
item.open = false;
else if (item.id === id)
item.open = true;
return item;
});
this.setState({
items: items,
openId: (id === this.state.openId ? '' : id)
});
}
<FlatList
data={this.state.items}
extraData={this.state}
renderItem={({item}) =>
<ListItemComponent
onPress={this._onPress.bind(this)}
bet={item}
categoryList={this.state.categoryList}
open={item.open}/>
}
refreshing={this.state.refreshing}
onRefresh={() => this._onRefresh()}
/>