FlatList 单个 select 单元格
FlatList single select cell
我按照官方文档中的示例,这里是如何实现 multiselection 功能:
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 };
});
};
虽然我正在努力让它成为单身 select。每当点击单元格时,很容易 return 带有错误值的新地图,但这意味着单元格不能被select再次点击它,这是我想要的功能。
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 };
});
};
提前致谢
你可以只设置一个值而不是像这样的地图
onPressItem = (id) => {
this.setState((state) => {
const selected = selected === id ? null : id;
return { selected };
});
};
我遇到了同样的问题,我的解决方案是:
_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 };
});
};
我按照官方文档中的示例,这里是如何实现 multiselection 功能:
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 };
});
};
虽然我正在努力让它成为单身 select。每当点击单元格时,很容易 return 带有错误值的新地图,但这意味着单元格不能被select再次点击它,这是我想要的功能。
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 };
});
};
提前致谢
你可以只设置一个值而不是像这样的地图
onPressItem = (id) => {
this.setState((state) => {
const selected = selected === id ? null : id;
return { selected };
});
};
我遇到了同样的问题,我的解决方案是:
_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 };
});
};