【问题标题】:NgRx compound selectorNgRx 复合选择器
【发布时间】:2018-09-07 16:49:54
【问题描述】:

有没有办法在 NgRx 中创建复合选择器?

例子:

export const paramSelector = (id) => createSelector(
  someState,
  state => state[id]
);

export const selectedId = createSelector(
  someOtherState,
  state => state.id
);

export const compoundSelector = createSelector(
  selectedId,
  id => paramSelector(id),
  state => state
);

显然上面的代码不起作用。有什么方法可以得到想要的结果(最后剪掉)?


这个想法是有专门的参数化选择器,以及一些使用它们的更高级别的选择器。想象一下paramSelector 更复杂。有时您想使用带有特定参数的paramSelector。有时您不想自己提供参数,而是想从商店的某个地方获取它(例如路由器状态)。

现在,您再也不想重复相同的代码,因此需要一个复合选择器。


编辑

功能请求已创建。可以找到here

【问题讨论】:

  • 你想达到什么目的?
  • @RenéWinkler 我已经更新了问题。我希望现在更清楚了。

标签: typescript ngrx


【解决方案1】:

您的第一个 sn-p 应该可以工作,第二个不会 - 有关更多信息,我将您推荐给 NgRx: Parameterized selectors

例如:

export const selectCustomer = (id: string) => createSelector(
  getCustomers,
  customers => customers[id]
);

在下一个版本中,可以为您的选择器添加额外的道具,如下所示:

export const getCustomerById = createSelector(
  getCustomers,
  (customers, props) => customers[props.id]
)

【讨论】:

  • 你好,我不认为它回答了这个问题。看到混乱,我更新了我的例子。希望现在更清楚了。
  • 我不确定我是否在关注。你的意思是如果有办法让你的选择器像重新选择一样有道具吗? github.com/reduxjs/reselect#accessing-react-props-in-selectors
  • 好的,我想做的很简单,我想从不同的选择器中获取选择器的参数。在compoundSelector 中,第一行是提供选择器。在第二行中,它投射第一个选择器并返回选择器。在第三行,它投射最终状态。在您的示例中,您非常广泛地使用了“道具”一词,我不得不承认直到现在我还没有遇到过这个词。我做了一点搜索,什么也没有。 ng-conf 中没有任何内容专门用于 NgRx,也没有在 NgRx 文档中。你能解释一下这个词是什么意思吗?
  • 对于道具,我的意思是选择器可能会收到一个额外的参数“属性”,这可以是你喜欢的任何东西。允许您在答案中执行示例或类似: const selector = createSelector( state => state.count * 10, (state, props) => state.count + props.value, (one, two) => one + 两个);您从未听说过它的原因是它正在开发中。
  • 在您的 CompoundSelector 示例中无法访问 id 属性
猜你喜欢
  • 1970-01-01
  • 2018-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-04
  • 2019-05-16
  • 1970-01-01
相关资源
最近更新 更多