问题标签 [reselect]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
466 浏览

javascript - 使用其他选择器重新选择选择器作为参数不执行

我正在尝试使用重新选择选择器作为另一个选择器的参数:

getSelectedProduct正在工作并在应该更新时更新。但是getSelectedProductProduct没有执行。我究竟做错了什么?

它们用于组件中:

动作差异

在此处输入图像描述

还原状态

在此处输入图像描述

导致顶部图像中差异的 redux 操作不会导致getSelectedProductProduct执行。我认为组件不知道其字段已更改。我正在进一步调查这件事。想知道该字段是否嵌套太深,以至于组件无法注册更改。

0 投票
2 回答
4062 浏览

ngrx - 为什么在此 @ngrx 示例中需要重新选择 createSelector?

下面的代码片段有什么作用?它取自这个文件

export const getCollectionLoading = createSelector(getCollectionState, fromCollection.getLoading);

fromCollection.getLoading只有一个truefalse值,所以可以通过使用来实现任何优化createSelector吗?

0 投票
2 回答
1076 浏览

javascript - 重选和递归选择器

我有一个带有项目树(标准化)的 redux 状态,例如:

我想获得项目 1 的值的减少总和(这里 = 10 + 20 = 30),我想为此创建一个重新选择选择器。

但是,如何定义递归选择器?

谢谢你的帮助。;-)

弗雷德里克

0 投票
1 回答
476 浏览

reactjs - 在 FlatList 的 Selector 中使用来自 Redux Reducer 的 Lodash 生成对象数组

如果您不了解 React 等,请阅读此处。以下是相同的问题,但与 React 等更相关:

我有包含一种数据的严重对象:价格:

加密货币数量:

如何获取这些对象并创建一个对象数组,例如:


对于 React 程序员:

要在 React 中使用新的 FlatList 组件,您需要提供一个对象数组

我使用了几个存储不同类型的加密货币数据的 reducer。Reducer1 商店价格:

Reducer2 存储您拥有的加密货币数量:

我的目标是遍历这些值并创建一个对象数组,例如

到目前为止,我认为正确的方法是在选择器中重新选择。缺少的部分是 createSelector 中的 lodash 部分。令人惊讶的是,我在互联网上没有找到任何结合 lodash 和 FlatList 的东西。非常感谢您的帮助。


解决方案奏效!更多解决方案在这里生成不同对象Javascript的对象数组 感谢您的帮助!很多 React 用户会喜欢

0 投票
1 回答
935 浏览

javascript - 将道具传递给选择器以根据该道具进行过滤

我需要将道具传递给选择器,以便我可以从选择器中获取单击项目的内容。但是我无法通过道具。我试过这种方式但没有成功

这是完整代码的要点

https://gist.github.com/MilanRgm/80fe18e3f25993a27dfd0bbd0ede3c20

0 投票
0 回答
109 浏览

reselect - reselect createSelector返回函数时怎么能被当成数据或者数组呢?

当我们使用 npm 包reselect(使用 React)时,我们可能会这样做

我认为someData实际上是一个功能?但是在我们的组件.jsx文件中,我们可以将其显示为:

所以有点奇怪,whensomeData是一个函数,但我们可以以某种方式将它视为一个数组。它是如何工作的?

0 投票
1 回答
194 浏览

redux - 根据结果​​先前的选择动态定义选择器

我有从商店(filterSelector)获取当前过滤器类型的选择器。
还有 3 个,它们使用不同的逻辑从存储中过滤实体,让我们假设它们的名称是 smallEntitiesSelector、mediumEntitiesSelector、bigEntitiesSelector。

创建选择器的最佳方法是什么,它将根据商店中的过滤器值返回过滤后的实体?

对于这个特定的示例,我将创建一个选择器,它接受过滤器参数,但在实际情况下,我在这个选择器中有更复杂的逻辑,我不想混合它们。

UPD:由于评论中的要求,我将添加更多代码。这是我如何使它工作的一种方法:

)

但我不喜欢这种解决方案,因为每次更改原始实体时都会执行所有 3 个选择器,而我只需要执行一个。所以 ti 有效,但我觉得有一种方法可以做得更好。

0 投票
1 回答
783 浏览

redux - 如何为尚不存在的状态创建 redux 选择器

我在 Redux 回声系统中寻找出路,我遇到了以下情况:假设我有一个 React 组件,它应该使用选择器连接到 redux 状态部分,但是这部分还不存在(未定义)。所以,在运行它时,我得到一个“get on undefined”错误。即使状态部分还不存在,是否可以以某种方式定义选择器并将其连接到组件?

我正在使用 reselect 来创建选择器,这是我用来避免抛出错误的一种解决方法:

通过这种方式,selectLogin选择器似乎监控了整个状态树。有没有更好的方法来做到这一点,或者对于具有未定义(=尚未设置)状态部分的选择器是否有最佳实践?

0 投票
4 回答
7501 浏览

javascript - 如何处理 Redux 中的关系数据?

我正在创建的应用程序有很多实体和关系(数据库是关系的)。了解一下,有 25 多个实体,它们之间有任何类型的关系(一对多、多对多)。

该应用程序基于 React + Redux。为了从 Store 中获取数据,我们使用了Reselect库。

我面临的问题是当我尝试从商店获取实体及其关系时。

为了更好地解释这个问题,我创建了一个简单的演示应用程序,它具有类似的架构。我将重点介绍最重要的代码库。最后,我将包含一个片段(小提琴)以便使用它。

演示应用

商业逻辑

我们有书籍和作者。一本书有一个作者。一位作者有很多书。尽可能简单。

Redux 商店

Store 以扁平结构组织,符合 Redux 最佳实践 - Normalizing State Shape

这是 Books 和 Authors Stores 的初始状态:

成分

这些组件被组织为容器和演示文稿。

<App />组件充当容器(获取所有需要的数据):

<View />组件仅用于演示。它将虚拟数据推送到 Store 并将所有 Presentation 组件呈现为<Author />, <Book />.

选择器

对于简单的选择器,它看起来很简单:

当你有一个计算/查询关系数据的选择器时,它会变得混乱。演示应用程序包括以下示例:

  1. 获取所有作者,其中至少有一本特定类别的书。
  2. 获得相同的作者,但与他们的书籍一起。

以下是讨厌的选择器:


加起来

  1. 如您所见,在选择器中计算/查询关系数据变得过于复杂。
    1. 加载子关系(作者->书籍)。
    2. 按子实体 ( getHealthAuthorsWithBooksSelector()) 过滤。
  2. 如果一个实体有很多子关系,就会有太多的选择器参数。结帐getHealthAuthorsWithBooksSelector()并想象作者是否有更多的关系。

那么你如何处理 Redux 中的关系呢?

它看起来像一个常见的用例,但令人惊讶的是没有任何好的实践。

*我检查了redux-orm库,它看起来很有希望,但它的 API 仍然不稳定,我不确定它是否已准备好生产。

JSF中。

0 投票
1 回答
2149 浏览

redux - 如何从嵌套减速器测试重新选择选择器?

我使用 Reselect 库创建了一个简单的 Redux 选择器。选择器获取数组中的最后一个对象。

Reselect docs中,测试示例是使用 Assert 库而不是 Expect 库构建的,但我的应用程序源自 React Create App,因此我包含了 Expect 和 Jest。

无论如何,无论我如何编写选择器测试,它都会挂在嵌套的 reducer: 上TypeError: Cannot read property 'arrayOfObj' of undefined

选择器.js

选择器.test.js