从平面列表中选择和删除多个项目
selecting and removing multiple items from flatlist
我有一个平面列表,如下所示:
<FlatList
numColumns={3}
scrollEnabled={false}
data={dataset}
keyExtractor={(item) => item.id}
extraData={selectedId}
renderItem={renderItem}
/>
用户可以 select 1 个或多个项目,如果该项目已经 selected 则它将被删除
我可以添加很多项目也可以删除它们,但是,问题是如果我 select 一个项目,我不能直接删除它我需要 select 另一个项目,然后是之前选择的项目将被删除。
但如果我再次点击相同的项目,我将无法删除它。我必须选择另一个项目,然后旧项目将被删除,而另一个项目将被添加。
我的渲染项目:
const renderItem = ({ item }) => {
return (
<TouchableOpacity
style={item.selected ? styles.setItemItemSlt : styles.setItemItem}
onPress={() => [
setSelectedId(item.id),
onPressBtn({ item }, item.selected),
]}
>
<Image style={styles.setItemItemImage} source={item.icon} />
</TouchableOpacity>
);
};
还有:
const [selectedId, setSelectedId] = useState(null);
数组如下所示:
const [dataset, setItem] = useState([
{
id: 1,
icon: require("../../src/assets/png/egg.png"),
name: "egg",
selected: false,
},
.
.
.
.
.
]);
和:
const onPressBtn = ({ item }) => {
// if it has been selected remove it
if (item.selected) {
item.selected = false;
}
// if it is not in the list add it
else {
item.selected = true;
}
};
我该如何解决这个问题?
试试这个方法,如果已经选择它会删除选择
// add index here
const renderItem = ({ item, index }) => {
return (
<TouchableOpacity
.....
onPress={() => [
.....
onPressBtn(item, index), // send index as param
]}
>
.........
</TouchableOpacity>
);
};
const onPressBtn = (item, index ) => {
const data = [...allergens];
data[index].selected = !data[index].selected;
allergy(data); // reset data here to state
};
我有一个平面列表,如下所示:
<FlatList
numColumns={3}
scrollEnabled={false}
data={dataset}
keyExtractor={(item) => item.id}
extraData={selectedId}
renderItem={renderItem}
/>
用户可以 select 1 个或多个项目,如果该项目已经 selected 则它将被删除
我可以添加很多项目也可以删除它们,但是,问题是如果我 select 一个项目,我不能直接删除它我需要 select 另一个项目,然后是之前选择的项目将被删除。
但如果我再次点击相同的项目,我将无法删除它。我必须选择另一个项目,然后旧项目将被删除,而另一个项目将被添加。
我的渲染项目:
const renderItem = ({ item }) => {
return (
<TouchableOpacity
style={item.selected ? styles.setItemItemSlt : styles.setItemItem}
onPress={() => [
setSelectedId(item.id),
onPressBtn({ item }, item.selected),
]}
>
<Image style={styles.setItemItemImage} source={item.icon} />
</TouchableOpacity>
);
};
还有:
const [selectedId, setSelectedId] = useState(null);
数组如下所示:
const [dataset, setItem] = useState([
{
id: 1,
icon: require("../../src/assets/png/egg.png"),
name: "egg",
selected: false,
},
.
.
.
.
.
]);
和:
const onPressBtn = ({ item }) => {
// if it has been selected remove it
if (item.selected) {
item.selected = false;
}
// if it is not in the list add it
else {
item.selected = true;
}
};
我该如何解决这个问题?
试试这个方法,如果已经选择它会删除选择
// add index here
const renderItem = ({ item, index }) => {
return (
<TouchableOpacity
.....
onPress={() => [
.....
onPressBtn(item, index), // send index as param
]}
>
.........
</TouchableOpacity>
);
};
const onPressBtn = (item, index ) => {
const data = [...allergens];
data[index].selected = !data[index].selected;
allergy(data); // reset data here to state
};