javascript - 重新选择选择器结构

标签 javascript reactjs redux reselect

我有以下示例结构..

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

使用已应用一组过滤器的 userOrganisedEventsSelector 的输出

sortedActiveUserOrganisedEventsSelector 

对 activeUserOrganisedEventsSelector 的输出进行排序

上述三个方法接受一个包含 userId 的 prop 对象,然后可以从中确定组织的事件。

问题:-

  1. 我希望所有三种事件类型(savedEvents、organisedEvents 和 attendingEvents)都具有相同的功能

  2. 在某些情况下,我希望 userId 由 props 提供,其他时候我需要使用状态中的 userId。

我正在寻求有关如何实现这一目标的帮助或建议,无需创建 30 个奇怪的函数,同时保持通过重新选择内存的好处。

最佳答案

我建议你给 re-reselect一试。这是一个很小的 ​​reselect 包装器,当我发现自己在与您类似的场景中编写了几乎相同的选择器时,我编写了它。

它将允许您在传递不同的参数(例如,您的 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,
);

关于javascript - 重新选择选择器结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45533629/

相关文章:

javascript - Angular 中用于货币使用的语言环境

javascript - 用 a4 尺寸缩放 div 和表格

javascript - 在本地存储自动完成/预先输入字段的数据

node.js - React 应用程序在本地运行,在 Heroku 错误代码=H10 上崩溃

javascript - 从浏览器中运行的前端 JavaScript 代码调用 Yelp API

javascript - React Native Redux 不改变状态我不明白为什么

javascript - 如何获取 ng-repeat 中生成的每个图像的 id?

javascript - 为什么使用 jQuery Mobile 的 css 中断箭头?

javascript - 组件渲染乱序

reactjs - Redux: mapStateToProps 为什么第二个参数 ownProps