首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >FlatList单选单元

FlatList单选单元
EN

Stack Overflow用户
提问于 2018-05-07 14:24:20
回答 2查看 1.2K关注 0票数 4

我学习了官方文档中的示例,下面是如何实现多重选择特性:

代码语言:javascript
运行
复制
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,但这意味着单元格不能被另一个点击取消选择,这在我的例子中是需要的。

代码语言:javascript
运行
复制
onPressItem = (id) => {
  this.setState((state) => {
    const selected = new Map();
    selected.set(id, !selected.get(id)); 
    return { selected };
  });
};

你将如何实现它?我应该使用lodash对Map进行迭代,以找到已经为真的映射并更改其值(现在可以确定如何迭代Map ),还是现在缺少更好的方法?

编辑

迭代selected映射的元素似乎是一个非常糟糕的想法,但它很简单,而且实际上很有效。有什么更好的方法做这件事,我错过了吗?

代码语言:javascript
运行
复制
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 };
  });
 };

提前感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-07 14:43:58

您可以只设置一个值,而不是像这样的地图

代码语言:javascript
运行
复制
onPressItem = (id) => {
  this.setState((state) => {
    const selected = selected === id ? null : id; 
    return { selected };
  });
};
票数 4
EN

Stack Overflow用户

发布于 2019-02-14 22:04:32

我也有同样的问题,我的解决办法是:

代码语言:javascript
运行
复制
_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 };
        });
    };
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50216549

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档