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

时间:2017-03-20 15:37:17

标签: redux

我正在制作SVG图表,我有一堆辅助方法用于在坐标和日期之间进行转换。目前我需要在任何地方应用扩展并且它很烦人,因此我考虑将辅助方法添加到redux存储,其中存储可以访问扩展并可以自动将其应用于方法。

这是理想的吗?

我还在考虑创建一个带有scale的函数,并返回所有带有curry的helper方法。如果我这样做,那么我需要在我使用的每个文件中重新实现这个curried函数它,每次都通过规模。

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

编辑:更多细节

限制:"存储"在中间件之外是不可访问的。

转换

getDateFromX(x) / scale

getDateFromX(x)

在功能中内置比例。比如,getDateFromX总是按比例划分,因此它应该在函数中,但是比例在redux存储中。

我原本问我是否可以让我的应用程序reducer返回一个函数返回的对象" getDateFromX"可以通过connect中的mapStateToProps获取。我理解它不赞成,或者我不会问原问题,我会简单地实现这个。

此外,还有大约7个功能可以进行类似的转换。在小时,天,日期和x之间转换。

2 个答案:

答案 0 :(得分:4)

没有。我猜,你可能在技术上这样做,但它绝对不能很好地利用Redux。 (我实际上很难想象"附加到商店的方法"实际上是否符合事物。)

更惯用的方法是使用选择器功能。例如:

import {createSelector} from "reselect";

const selectScale = state => state.scale;

const selectSomeValue = state => state.someValue;

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

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

答案 1 :(得分:2)

随着我们的应用程序的增长,我们遇到了类似的问题。我们尽量保持我们的州尽可能小,然后根据需要计算其他信息。我们发现这是相当强大的,但随着应用程序的增长,我们必须在整个应用程序中导入这些状态辅助函数,并且它不是那么用户友好。我一直在想要获取所有状态助手并将它们附加到中间件中的状态对象,以便组件可以轻松访问它们,但它们实际上并没有存储在我们的Redux存储中。我认为你可以结合markerikson的观点,但不是在你的代码库中复制这些函数而是将它们传递给状态。

所以不要在整个应用中执行此操作

import { getDateFromX } from 'helpers'

...

getDateFromX(state)

你这样做:

[ REDUX ] ---> [ CONNECT ] ---> [ UI ]
           ^
           |
   Attach helpers here

然后,当您的状态传来时,您可以state.helpers.getDateFromX

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

相关问题