我有一个“事件”列表:
Private Function GetDuplicatitions(array As String()) As String
Dim result = ""
For Each item In array
If IsInList(result, item) Then Continue For
If HasDuplications(array, item) Then result &= item & ","
Next
Return result
End Function
Private Function HasDuplications(array As String(), text As String) As Boolean
Dim count = 0
For Each item In array
If item = text Then count = count + 1
If count > 1 Then Return True
Next
Return False
End Function
Private Function IsInList(list As String, item As String) As Boolean
For Each duplicated In list.Split(",")
If item = duplicated Then Return True
Next
Return False
End Function
我在componentDidUpdate中获取这些事件,然后将它们作为道具形式传递给我的组件,即redux connect mapStateToProps-它们来自“选择器”-getEvents。
我想将它们显示在react-big-calendar上,该日历需要这种格式-
Dim list = {"a", "a", "b", "c", "c"}
Label7.Text = GetDuplicatitions(list)
在哪里将它们从我的对象转换为react-big-calendar对象?
这似乎必须在组件中发生,因此,如果我切换到另一个日历库,我的redux代码将保持不变。
是否有执行此操作的标准模式?我应该直接在我的render方法中这样做吗?
{
id: 1,
description: "Did something",
date: <date>,
eventTypeId: 1
}
或者有更好的方法吗?
答案 0 :(得分:1)
您应该编写一个选择器并在该选择器中转换这些事件,而不是在组件中进行转换。每当您以后想要更改为其他库时,只需更改一个选择器中的逻辑,而不必在每个组件中进行更改
const mapStateToProps(state, props) {
const events = getEvents(state, props);
return {
events
}
}
...
const getEvents = (state, props) => { // this can be a reselect selector as well
// transform logic here
return events;
}
答案 1 :(得分:1)
现在无法在React文档上找到此方法,但是从性能的角度来看,最好将render
方法保持尽可能简单,并且不要在其他逻辑上进行重载。
考虑到您的组件会因为其他道具的更改而重新呈现-每次它将重新计算bigCalEvents
这就是为什么最好以期望数据的格式将数据传递到组件。
我建议您在mapStateToProps
函数中进行此处理。另外,如果您使用的是reselect
库,则可以记住结果以避免重新提交。