我学习了官方文档中的示例,下面是如何实现多重选择特性:
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映射的元素似乎是一个非常糟糕的想法,但它很简单,而且实际上很有效。有什么更好的方法做这件事,我错过了吗?
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 };
});
};提前感谢
发布于 2018-05-07 14:43:58
您可以只设置一个值,而不是像这样的地图
onPressItem = (id) => {
this.setState((state) => {
const selected = selected === id ? null : id;
return { selected };
});
};发布于 2019-02-14 22:04:32
我也有同样的问题,我的解决办法是:
_onPressItem = (id: string) => {
// updater functions are preferred for transactional updates
this.setState((state) => {
// copy the map rather than modifying state.
const selected = new Map(state.selected);
// save selected value
let isSelected = selected.get(id);
// reset all to false
selected.forEach((value, key) => {
selected.set(key, false);
});
// then only activate the selected
selected.set(id, !isSelected);
return { selected };
});
};https://stackoverflow.com/questions/50216549
复制相似问题