我遵循了官方文档中的示例,这是实现多选功能的方法:
state = { selected: (new Map(): Map<string, boolean>) };
onPressItem = (id) => {
this.setState((state) => {
const selected = new Map(state.selected);
selected.set(id, !selected.get(id));
return { selected };
});
};
不过,我正在努力使其成为单选。任何时候点击单元格都可以很容易地返回带有错误值的新 map ,但这意味着无法通过再次点击单元格来取消选择该单元格,这在我的情况下是所需的功能。
onPressItem = (id) => {
this.setState((state) => {
const selected = new Map();
selected.set(id, !selected.get(id));
return { selected };
});
};
你将如何实现它?我应该使用 lodash 迭代 Map 以找到已经为真的那个并改变它的值(现在确定如何迭代 Map ),或者也许我现在缺少一些更好的方法?
编辑
迭代
selected
的元素 map 似乎是一个非常丑陋的想法,但它很简单,而且确实有效。有没有更好的方法来做到这一点,我错过了?onPressItem = (id: string) => {
this.setState((state) => {
const selected = new Map(state.selected);
selected.set(id, !selected.get(id));
for (const key of selected.keys()) {
if (key !== id) {
selected.set(key, false);
}
}
return { selected };
});
};
提前致谢
最佳答案
您可以只设置一个值而不是像这样的 map
onPressItem = (id) => {
this.setState((state) => {
const selected = selected === id ? null : id;
return { selected };
});
};
关于react-native - FlatList 单选单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50216549/