是否可以将助手方法添加到redux存储?

是否可以将助手方法添加到redux存储?,redux,Redux,我正在制作一个SVG图表,我有一系列的助手方法用于坐标和日期之间的转换。目前,我需要在任何地方应用缩放,这很烦人,所以我考虑将helper方法添加到redux存储中,在那里存储可以访问缩放,并且可以在方法中自动应用它 这是否理想 我还考虑创建一个具有scale的函数,并返回所有带有scale的helper方法。如果我这样做,那么我需要在我使用的每个文件中重新实例化这个curried函数,每次传递scale 使用redux商店,我只需要做一次 编辑:更多细节 限制:“存储”不可访问,可能在中间件之

我正在制作一个SVG图表,我有一系列的助手方法用于坐标和日期之间的转换。目前,我需要在任何地方应用缩放,这很烦人,所以我考虑将helper方法添加到redux存储中,在那里存储可以访问缩放,并且可以在方法中自动应用它

这是否理想

我还考虑创建一个具有scale的函数,并返回所有带有scale的helper方法。如果我这样做,那么我需要在我使用的每个文件中重新实例化这个curried函数,每次传递scale

使用redux商店,我只需要做一次

编辑:更多细节

限制:“存储”不可访问,可能在中间件之外

皈依

getDateFromX(x) / scale
公正

getDateFromX(x)
在函数中内置了比例。比如,getDateFromX总是按比例划分,所以它应该在函数中,但比例在redux存储中

我最初问我是否可以让我的应用程序reducer在其返回的对象“getDateFromX”中返回一个函数,该函数可以通过connect中的mapStateToProps获取。我知道这是不受欢迎的,否则我就不会问最初的问题,我会简单地实现这一点

另外,还有大约7个函数进行类似的转换。在小时、天、日期和x之间进行转换。

不。我想,从技术上讲,你可以做到这一点,但这绝对不是Redux的好用途。(实际上,我很难想象“附加到商店的方法”将如何实际应用到事物中。)

更惯用的方法是使用选择器函数。例如:

import {createSelector} from "reselect";

const selectScale = state => state.scale;

const selectSomeValue = state => state.someValue;

const selectScaledValue = createSelector(
    selectScale, selectSomeValue,
    (scale, somevalue) => scale * someValue
);

如果您在
MapStateTrops
函数中始终使用
Selected ScaledValue()
,则每次缩放或原始值更改时,它都会为您提供缩放值。

随着我们的应用程序的发展,我们遇到了类似的问题。我们尽量保持我们的状态尽可能小,然后根据需要计算额外的信息。我们发现这是相当健壮的,但随着应用程序的发展,我们必须在整个应用程序中导入这些状态帮助器函数,这对用户不是很友好。我一直在考虑将所有的状态帮助程序附加到中间件中的状态对象,这样组件就可以轻松访问它们,但实际上它们并没有存储在我们的Redux存储中。我认为您可以结合markerikson的观点,但不要在代码库中复制这些函数,而是将它们与状态一起传递

因此,不要在你的应用程序上都这么做

import { getDateFromX } from 'helpers'

...

getDateFromX(state)
您可以这样做:

[ REDUX ] ---> [ CONNECT ] ---> [ UI ]
           ^
           |
   Attach helpers here
然后,随着状态的传递,您可以执行
state.helpers.getDateFromX


这还没有完全充实,但我也一直在尝试为这个问题提供一个优雅的解决方案,它不会违反Redux的最佳实践。

帮助者无法访问Redux状态,因为商店不会暴露在connect和saga中间件之外。所以我必须把你写的东西放到一个函数中,然后在每个组件中,在比例中加上咖喱。很多重复,但我想没有更好的方法了。哦,我明白了,这就是重新选择的目的。另一个用于公开redux状态的中间件。六羟甲基三聚氰胺六甲醚。。。我仍然更喜欢curried函数,因为很难说随机函数中有redux状态。谢谢你!重新选择不是“中间件”。它是一个用于创建记忆函数的通用库,恰好与Redux一起工作得很好。您可以在任何地方使用这些函数,但它们最常用于
mapState
函数和thunks/sagas,以帮助检索嵌套在Redux状态树中的数据。您可能想阅读我在中列出的有关选择器的一些文章。因此,我仍然需要为它提供访问我的商店的权限。然后重新选择是无用的,因为存储只属于react redux、redux saga和索引文件。否则你会在全球范围内曝光。啊。。。不,不完全是。同样,重新选择函数只是函数。您通常会在商店状态可访问或已提供的地方使用它们,但它们不会以任何方式绑定到商店。我想我很难理解你的用例。您是否可以更新您的问题,以提供一些示例伪代码和更详细的描述,说明您希望完成的任务?