如何处理非规范化数据以传递给平面列表?
Posted
技术标签:
【中文标题】如何处理非规范化数据以传递给平面列表?【英文标题】:How to handle de-normalized data to pass to a flatlist? 【发布时间】:2018-10-10 10:56:37 【问题描述】:我使用重新选择来选择非规范化(映射)数据以传递给平面列表。主要问题是项目是“可星标的”。 星值在归一化数据中,所以所有的东西都会在按星时重新计算,让应用变慢。
所以我的问题是,当您的规范化数据频繁更改时,我该如何处理去规范化数据?
我找到的解决方案:
1) 移走交互式数据?
但现在我必须在启动时拆分数据,并在每次获取数据时拆分数据。这很慢,但是如果您使用的是“加载器”(activityIndicator/刷新指示器),那将不是一个真正的问题。 所以现在我可以在重新选择时进行非规范化,并且缓存只会在数据获取时过期:这很好。
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 行为。
【讨论】:
以上是关于如何处理非规范化数据以传递给平面列表?的主要内容,如果未能解决你的问题,请参考以下文章
Powershell - 如何处理非时间戳日志文件条目,包括空行
Tensorflow / Keras:规范化训练/测试/实时数据或如何处理现实?
C# HttpWebRequest.GetResponse - 如何处理非异常与 webexception 响应的 StatusCode 使用情况?