javascript - 按日期顺序渲染 React 组件
问题描述
我必须根据连接到日历库的日期呈现一系列事件。我正在使用 Redux/thunk 将所有事件对象的索引带到前端。
我根据搜索栏值过滤掉事件,并在日历上选择当前日期,如下所示。
import moment from 'moment'
function filterEvents (events, searchValue, selectedDay) {
const fixedSearchValue = searchValue.toLowerCase()
const fixedSelectedDate = moment(calendarDateFormatter(selectedDay))
return events.filter(event => {
let eventTitle, eventDate, fixedEventDate, displayEventDate
eventTitle = event.title.toLowerCase()
eventDate = event.start_date
fixedEventDate = moment(eventDate)
displayEventDate = fixedEventDate.format("dddd, MMMM D")
if ((searchValue === "" || eventTitle.includes(fixedSearchValue))
&& fixedEventDate.isAfter(fixedSelectedDate)) {
event["fixedDate"] = fixedEventDate
event["displayDate"] = displayEventDate
return true
} else {
return false
}
})
}
function calendarDateFormatter(selectedDay) {
return selectedDay.year + "-" + selectedDay.month + "-" + selectedDay.day
}
然后,我使用以下命令按日期顺序对生成的事件进行排序:
function sortEventsByDate (filteredEvents) {
return filteredEvents.sort((event1, event2) => (
dateComparer(event1, event2))
)
}
function dateComparer (event1, event2) {
let eventOneDate, eventTwoDate
eventOneDate = event1.fixedDate
eventTwoDate = event2.fixedDate
return eventOneDate.isAfter(eventTwoDate) ? 1 : -1
}
我现在有一组根据日期/时间排序的事件项。然后我尝试提取当前事件的所有唯一日期(按日期顺序),将日期呈现为父组件,该组件将按时间顺序列出与日期匹配的相应事件(作为子组件)。然后它将是具有相应事件的下一个日期,依此类推。
我怎样才能以一种干净/可扩展/时间复杂度有效的方式来解决这个问题?我尝试创建一个函数,该函数将创建一个对象,遍历排序事件数组,将其日期作为字符串用作键,并将与日期键匹配的事件数组用作值,并将其用作道具日期父组件。但是,对象键的保存顺序与它们在数组中的迭代顺序不同。这导致无序的日期/相应事件。请指教!
解决方案
您可以使用 Array.filter 和 Array.map 的组合
const getFilteredRenderedNodes = (list) => list
.filter(item => item.date === someDate)
.map(item => (
<div key={item.id}>{item.date}</div>
));
UsingArray.filter
迭代数组并按条件查找匹配项item.date === someDate
。这是一个可替换的标准,但它是您用来从列表中选择项目子集的标准。
UsingArray.map
返回一个React.ReactNode
由 React 解释和渲染的 jsx 数组。render 方法包含一个key
必须唯一的字段,以便 React 知道要更新和渲染和处理事件的节点。
然后你消费:
return (
<SomeComponent>
{getFilteredRenderedNodes(myItemList)}
</SomeComponent>
);
myItemList
你的物品清单在哪里。
推荐阅读
- python - Pyinstaller 无法访问数据文件夹
- spring-boot - ignore_row_on_dupkey_index 不适用于 Spring Boot
- apache-flink - JSON 到 Avro 解码 - AvroTypeException:未找到预期的字段名称
- python - 如何修改字典中的值?
- wordpress - 如果帖子类型名称为“媒体”,则 WordPress 古腾堡编辑器不适用于自定义帖子类型
- google-apps-script - 显示包含来自另一个单元格的值的消息的自定义函数 Google 表格
- javascript - Javascript从对应的键列表中获取对象值
- javascript - daterangepicker.js 选择当前日期
- matlab - 如何在 Matlab 中使用 randsample 而不会耗尽内存?
- mongodb - Mongodb Aggregrate -unwind 然后分组(查找唯一计数)