react-native - FlatList 单选单元格

标签 react-native react-native-flatlist

我遵循了官方文档中的示例,这是实现多选功能的方法:

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/

相关文章:

typescript - React Native with Typescript 2.8 - 无法重新声明 block 作用域变量 'console'

javascript - React 条件渲染和导航栏

react-native - React Native Flatlist 看不到 flatlist 的底部

android - FlatList 从列表底部上拉

reactjs - 虚拟化列表 : You have a large list that is slow to update

react-native - 任何状态更改时的 FlatList ScrollView 错误 - 不变违规 : Changing onViewableItemsChanged on the fly is not supported

javascript - TS2349 : Cannot invoke an expression whose type lacks a call signature. 类型 'typeof ... renderIf"' 没有兼容的调用签名

swift - 如何使用 Swift 创建 React-Native 框架

javascript - 如何在 React Native 中绘制虚线边框样式

javascript - 数据未在 React Native 中使用 Flatlist 渲染