如何处理非规范化数据以传递给平面列表?

Posted

技术标签:

【中文标题】如何处理非规范化数据以传递给平面列表?【英文标题】:How to handle de-normalized data to pass to a flatlist? 【发布时间】:2018-10-10 10:56:37 【问题描述】:

我使用重新选择来选择非规范化(映射)数据以传递给平面列表。主要问题是项目是“可星标的”。 星值在归一化数据中,所以所有的东西都会在按星时重新计算,让应用变慢。

所以我的问题是,当您的规范化数据频繁更改时,我该如何处理去规范化数据?

我找到的解决方案:

1) 移走交互式数据?

但现在我必须在启动时拆分数据,并在每次获取数据时拆分数据。这很慢,但是如果您使用的是“加载器”(activityIndi​​cator/刷新指示器),那将不是一个真正的问题。 所以现在我可以在重新选择时进行非规范化,并且缓存只会在数据获取时过期:这很好。

2) 仅在 Ids 数组上使用选择器,而不涉及标准化数据?

如果我可以让 flatlist 处理,则无需映射。 但这需要将数组和规范化数据都传递给平面列表,使用数组作为数据并将规范化作为额外数据。 但现在,我不确定,有大量数据传递给每个平面列表项。

3) 不要使用 relect,但可能对数据进行分页?

现在我只需要映射几个元素,这些元素使用 onEndReach 递增。 按下星号时返回的数组会很小,所以通常很快。

我认为哪里还需要重新选择?排序数据 在标准化数据源上,排序并不简单。 (第一张地图,而不是排序)。 但是如果不使用 reselect 进行非规范化很难。

知道要走哪条路吗?更好的解决方案?

ps。对不起我的英语不好,谢谢

【问题讨论】:

【参考方案1】:

1) 我发现使用React.Component 并传递规范化的过滤道具,这可能会很好。 就像这样:

  _renderItem = (item) => (
    <ListItem
      data=this.props.data[item.id]
      onPressFavorite=this.props.onPressFavorite
    />
  );

这是一个有效的模式吗?

【讨论】:

【参考方案2】:

我不知道你是否想通了,但也许解决方案不是使用 FlatList 并像这样迭代:

const normalizeData = []
Object.keys(normalizeData).map((key, id) => 
          const data = normalizeData[key];
return <WrapperComponent key=key item=data />

您也可以添加 ScrollView,让您重新创建 FlatList 行为。

【讨论】:

以上是关于如何处理非规范化数据以传递给平面列表?的主要内容,如果未能解决你的问题,请参考以下文章

spark如何处理非数值的聚合最大值? [复制]

Powershell - 如何处理非时间戳日志文件条目,包括空行

SQL Server 如何处理非聚集索引中的包含列?

表单关闭后如何处理非托管资源? [复制]

Tensorflow / Keras:规范化训练/测试/实时数据或如何处理现实?

C# HttpWebRequest.GetResponse - 如何处理非异常与 webexception 响应的 StatusCode 使用情况?