react-native - renderRows如何获取最后一项的值
问题描述
我正在渲染从 api 响应中获取的数据。我希望能够将正在呈现的当前行与最后一行进行比较。
示例:将项目日期与最后一个项目进行比较。能够插入当天的分隔符。这只是我正在尝试做的一个简单示例。
//data
const array = [
{day: '3/14', name: 'item1'},
{day: '3/14', name: 'item2'},
{day: '3/14', name: 'item3'},
{day: '3/15', name: 'item4'}
]
如果是新的一天,我将插入一个分隔符。目的是按天对数据进行分组。
let lastDay = null;
renderRows(item, index) {
//conditions
let day = item.day;
if(day != lastDay) daySeparator = true;
//store last day
lastDay = day;
return (
<ListItem noIndent style={style.listRow}>
<Row style={[style.tableRow,{alignItems: 'center'}]}>
<Text>{item.name}</Text>
</Row>
</ListItem>
);
}
我的问题是 renderRows 不像 for 循环那样工作,它将每个项目单独渲染,而无法跟踪以前渲染的项目。
是否可以这样做,或者我是否需要在将数组传递给 RenderRows 之前对其进行操作?如果是这样,最优化的方法是什么,foreach?循环?
解决方案
现在你的问题更清楚了,我可以建议你使用类似的东西<SectionList>
(见doc)。为了使用 aSectionList
您必须将其传递给分段数组。使用您发布的数据结构,我将按天对项目进行分组:
const array = [
{ day: "3/14", name: "item1" },
{ day: "3/14", name: "item2" },
{ day: "3/14", name: "item3" },
{ day: "3/15", name: "item4" }
];
const grouped = array.reduce(
(result, item) => ({
...result,
[item["day"]]: [...(result[item["day"]] || []), item]
}),
{}
);
const sectionedList = Object.keys(grouped).map(item => ({
title: item,
data: grouped[item]
}));
这将为您提供以下结构:
[
{
title: "3/14",
data: [
{ day: "3/14", name: "item1" },
{ day: "3/14", name: "item2" },
{ day: "3/14", name: "item3" }
]
},
{
title: "3/15",
data: [{ day: "3/15", name: "item4" }]
}
];
现在您可以在 a 中使用它<SectionList>
,例如:
<SectionList
renderItem={({item, index, section}) => {...}}
renderSectionHeader={({section: {title}}) => (
<Text style={{fontWeight: 'bold'}}>{title}</Text>
)}
sections={sectionedList}
keyExtractor={(item, index) => item + index}
/>
这样您就可以正确自定义所有内容。
我真的希望这可以帮助你!
推荐阅读
- assembly - 无法理解 MSP430 在装配中的中断
- python - 员工用户如何在 Django 中编辑他们的个人资料?
- regex - 为什么这个正则表达式匹配一个 MAC 地址而不匹配另一个?
- jenkins - Jenkins 扩展电子邮件 - presendScript 无法创建文件
- r - 我应该使用什么测试来查看不同人口与在这些地点发现的船只百分比之间是否存在相关性?
- laravel - 如何在控制器中传递数据库数据而不是数组
- apache - Apache Config Server 仅重定向主页而不是其他主页
- python - 气流操作符中基于depends_on_past的任务失败
- c - typedef 数组与 typedef 指针
- c++ - 如何从父进程读取标准输入?