我按照官方文档中的示例,这里是如何实现多选功能:
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 };
});
};
提前致谢
答案 0 :(得分:4)
您只能设置一个值而不是像这样的地图
| Attributes | Field type | value | description
| - | - | - | -
| required | `*` | boolean`(default=false)` | check if field has a value if set true.
| requiredPhrase | `*` | string`(default=This field is required.)` | error shown when field is required and empty.
答案 1 :(得分:0)
我遇到了同样的问题,我的解决方法是:
_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 };
});
};