Javascript 重新选择选择器结构
我有以下示例结构Javascript 重新选择选择器结构,javascript,reactjs,redux,reselect,Javascript,Reactjs,Redux,Reselect,我有以下示例结构 userId: { savedEvents: { eventId: true, eventId: true, eventId: true, }, organisedEvents: { eventId: true, eventId: true, eventId: true, }, attendingEvents: { eventId: true, eventId: true,
userId: {
savedEvents: {
eventId: true,
eventId: true,
eventId: true,
},
organisedEvents: {
eventId: true,
eventId: true,
eventId: true,
},
attendingEvents: {
eventId: true,
eventId: true,
eventId: true,
}
}
我正在使用reselects createSelector方法尝试和链接选择器,以优化内存和重用业务逻辑
例如:-
userOrganisedEventsSelector
返回已组织事件ID的列表
activeUserOrganisedEventsSelector
将UserOrganizedEventSelector的输出与已应用的一组筛选器一起使用
sortedActiveUserOrganisedEventsSelector
对ActiveUserOrganizedEventSelector的输出进行排序
上述三种方法接受一个包含userId的prop对象,从中可以确定组织的事件
问题:-
userOrganisedEventsSelector
重新选择
包装器,当我发现自己在一个类似于你的场景中编写了几乎相同的选择器时,我编写了它
它将允许您在传递不同的参数(例如,userID
)时不重复选择器代码,并更好地管理选择器缓存
这里有几行伪代码,只要你走上正确的轨道:
import createSelector from 'reselect';
import createCachedSelector from 're-reselect';
// Normal reselect selector:
// getUserEvents(state, userId)
const getUserEvents = createSelector(
state => state.events
(state, userId) => userId, // Get user from state if userId not provided
(events, userId) => events[userId], // Return user's events
);
// Cached re-reselect selector (cached by eventType):
// getUserEventsOfType(state, userId, eventType = 'ALL')
const getUserEventsOfType = createCachedSelector(
getUserEvents, // Get events from getUserEvents
(state, userId, eventType = 'ALL') => eventType,
(userEvents, eventType) => userEvents[eventType] // Just pseudo code!
)(
// Keep memoization when calling selector with different eventType
(state, userId, eventType = 'ALL') => eventType,
);
碰巧,我今天早上也偶然发现了你的自由。谢谢你的示例和库。我已经尝试了重新选择库。我有一个疑问。对于selectorA,如果我们使用userid作为缓存键,我可以使用userid作为selectorB的键吗?