问题标签 [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.
ngrx - 为什么在此 @ngrx 示例中需要重新选择 createSelector?
下面的代码片段有什么作用?它取自这个文件。
export const getCollectionLoading = createSelector(getCollectionState, fromCollection.getLoading);
的fromCollection.getLoading
只有一个true
或false
值,所以可以通过使用来实现任何优化createSelector
吗?
在
javascript - 重选和递归选择器
我有一个带有项目树(标准化)的 redux 状态,例如:
我想获得项目 1 的值的减少总和(这里 = 10 + 20 = 30),我想为此创建一个重新选择选择器。
但是,如何定义递归选择器?
谢谢你的帮助。;-)
弗雷德里克
reactjs - 在 FlatList 的 Selector 中使用来自 Redux Reducer 的 Lodash 生成对象数组
如果您不了解 React 等,请阅读此处。以下是相同的问题,但与 React 等更相关:
我有包含一种数据的严重对象:价格:
加密货币数量:
如何获取这些对象并创建一个对象数组,例如:
对于 React 程序员:
要在 React 中使用新的 FlatList 组件,您需要提供一个对象数组
我使用了几个存储不同类型的加密货币数据的 reducer。Reducer1 商店价格:
Reducer2 存储您拥有的加密货币数量:
我的目标是遍历这些值并创建一个对象数组,例如
到目前为止,我认为正确的方法是在选择器中重新选择。缺少的部分是 createSelector 中的 lodash 部分。令人惊讶的是,我在互联网上没有找到任何结合 lodash 和 FlatList 的东西。非常感谢您的帮助。
解决方案奏效!更多解决方案在这里生成不同对象Javascript的对象数组 感谢您的帮助!很多 React 用户会喜欢
javascript - 将道具传递给选择器以根据该道具进行过滤
我需要将道具传递给选择器,以便我可以从选择器中获取单击项目的内容。但是我无法通过道具。我试过这种方式但没有成功
这是完整代码的要点
https://gist.github.com/MilanRgm/80fe18e3f25993a27dfd0bbd0ede3c20
reselect - reselect createSelector返回函数时怎么能被当成数据或者数组呢?
当我们使用 npm 包reselect(使用 React)时,我们可能会这样做
我认为someData
实际上是一个功能?但是在我们的组件.jsx
文件中,我们可以将其显示为:
所以有点奇怪,whensomeData
是一个函数,但我们可以以某种方式将它视为一个数组。它是如何工作的?
redux - 根据结果先前的选择动态定义选择器
我有从商店(filterSelector)获取当前过滤器类型的选择器。
还有 3 个,它们使用不同的逻辑从存储中过滤实体,让我们假设它们的名称是 smallEntitiesSelector、mediumEntitiesSelector、bigEntitiesSelector。
创建选择器的最佳方法是什么,它将根据商店中的过滤器值返回过滤后的实体?
对于这个特定的示例,我将创建一个选择器,它接受过滤器参数,但在实际情况下,我在这个选择器中有更复杂的逻辑,我不想混合它们。
UPD:由于评论中的要求,我将添加更多代码。这是我如何使它工作的一种方法:
)
但我不喜欢这种解决方案,因为每次更改原始实体时都会执行所有 3 个选择器,而我只需要执行一个。所以 ti 有效,但我觉得有一种方法可以做得更好。
redux - 如何为尚不存在的状态创建 redux 选择器
我在 Redux 回声系统中寻找出路,我遇到了以下情况:假设我有一个 React 组件,它应该使用选择器连接到 redux 状态部分,但是这部分还不存在(未定义)。所以,在运行它时,我得到一个“get on undefined”错误。即使状态部分还不存在,是否可以以某种方式定义选择器并将其连接到组件?
我正在使用 reselect 来创建选择器,这是我用来避免抛出错误的一种解决方法:
通过这种方式,selectLogin
选择器似乎监控了整个状态树。有没有更好的方法来做到这一点,或者对于具有未定义(=尚未设置)状态部分的选择器是否有最佳实践?
javascript - 如何处理 Redux 中的关系数据?
我正在创建的应用程序有很多实体和关系(数据库是关系的)。了解一下,有 25 多个实体,它们之间有任何类型的关系(一对多、多对多)。
该应用程序基于 React + Redux。为了从 Store 中获取数据,我们使用了Reselect库。
我面临的问题是当我尝试从商店获取实体及其关系时。
为了更好地解释这个问题,我创建了一个简单的演示应用程序,它具有类似的架构。我将重点介绍最重要的代码库。最后,我将包含一个片段(小提琴)以便使用它。
演示应用
商业逻辑
我们有书籍和作者。一本书有一个作者。一位作者有很多书。尽可能简单。
Redux 商店
Store 以扁平结构组织,符合 Redux 最佳实践 - Normalizing State Shape。
这是 Books 和 Authors Stores 的初始状态:
成分
这些组件被组织为容器和演示文稿。
<App />
组件充当容器(获取所有需要的数据):
<View />
组件仅用于演示。它将虚拟数据推送到 Store 并将所有 Presentation 组件呈现为<Author />, <Book />
.
选择器
对于简单的选择器,它看起来很简单:
当你有一个计算/查询关系数据的选择器时,它会变得混乱。演示应用程序包括以下示例:
- 获取所有作者,其中至少有一本特定类别的书。
- 获得相同的作者,但与他们的书籍一起。
以下是讨厌的选择器:
加起来
- 如您所见,在选择器中计算/查询关系数据变得过于复杂。
- 加载子关系(作者->书籍)。
- 按子实体 (
getHealthAuthorsWithBooksSelector()
) 过滤。
- 如果一个实体有很多子关系,就会有太多的选择器参数。结帐
getHealthAuthorsWithBooksSelector()
并想象作者是否有更多的关系。
那么你如何处理 Redux 中的关系呢?
它看起来像一个常见的用例,但令人惊讶的是没有任何好的实践。
*我检查了redux-orm库,它看起来很有希望,但它的 API 仍然不稳定,我不确定它是否已准备好生产。
JSF中。
redux - 如何从嵌套减速器测试重新选择选择器?
我使用 Reselect 库创建了一个简单的 Redux 选择器。选择器获取数组中的最后一个对象。
在Reselect docs中,测试示例是使用 Assert 库而不是 Expect 库构建的,但我的应用程序源自 React Create App,因此我包含了 Expect 和 Jest。
无论如何,无论我如何编写选择器测试,它都会挂在嵌套的 reducer: 上TypeError: Cannot read property 'arrayOfObj' of undefined
。
选择器.js
选择器.test.js