在Redux应用程序中将模型特定的业务逻辑放在哪里

问题描述:

我很努力地理解我应该在我正在构建的Redux/React应用程序中放置哪些功能。在Redux应用程序中将模型特定的业务逻辑放在哪里

我的场景如下,在我当前的应用程序中我有几个JS类,它们环绕特定的json对象,并提供方法来获取基于特定条件转换的数据的各个部分。例如,他们有一个getProperty('name')方法,该方法查找当前主机环境并返回该主机的正确子属性值。

哪里可以在Redux应用程序中实现此逻辑的正确位置?理想情况下,我想将其封装在模型中,以便其他开发人员无需在每个视图中重新实现它。

会在我的数据加载操作中将json数据转换为类并通过reducer存储到商店中是正确的吗?如果是这样的话,我怎么能确定这个状态不会通过类中的setter方法变异?

任何帮助/意见表示赞赏。

+0

[Redux redurs和action creators之间的逻辑如何划分?](http://*.com/questions/34098125/how-to-divide-the-logic-between-redux-reducers-and -action-creators) –

会转化JSON数据到一个类中我的数据加载 行动,并存储在通过减速商店是正确的?

我认为你的陈述非常接近,我们来添加一些注意事项。

减速器不是处理任何这样的逻辑的正确位置,因为它只能返回一个新的状态对象。

您的动作创建者应该处理动作,因此如果需要某些API操作或数据操作,动作创建者是处理动作的最佳位置。

当您使用redux thunk中间件时,您可以实现更多功能动作创建者。

如果我理解正确,你已经有了处理你的js文件中的JSON数据的逻辑。如果你喜欢,我会把这些文件当作我自己的专有库或API。将其包含到我的动作创建者中,并在js lib/API中调用适当的方法以从JSON获取正确的数据或转换后的数据。

然后我将这些数据传递给reducer并将数据放入状态。

这样你就可以重用已经存在的js文件,再加上你可以在团队*享行动创造者。

如果是这样,我怎么能确定该状态不会通过类中的setter 方法变异?

你不应该把所有的数据放到你的状态。将逻辑保存在您的js文件中,并将您的处理函数映射到动作创建者的动作。所以,如果需要操纵,就要采取正确的行动。只保留与状态对象中的应用状态相关的数据。

+0

感谢您的回应! 我仍然困惑,为什么我需要创建一个动作创建者和一个动作来从我的状态读取一个特定的值。 对于我来说,只需要阅读一个值就可以做很多工作,这似乎是违反直觉的。 这是我想在终极版 功能配置(JSON){ this.data = JSON } Config.prototype.getValue =功能(键){VAR ENV =该实现的东西类型.getEnvironment(); return _getDeepValueForEnv(key,env); } Config.prototype.getEnvironment = function(){ return _findCurrentEnvironment(); } – monobyte

如果您想要转换视图的模型数据,那么在缩减器之外执行它是适当的。通常我们建议您导出采用当前state(以及其他参数,如environment)的函数,并返回视图需要的任何参数,例如getVisibleTodos(state)。这些功能可以类似于组成减速器的方式组成,事实上,我们建议将它们与减速器一起定义,以便在状态更改时不要忘记更改它们。

shopping cart example演示了这种方法。但是,重新计算每个状态变化的所有派生状态都是低效的。这就是为什么我们建议使用像Reselect这样的库,它可以让您将选择器函数编写为其他选择器函数的依赖项,并且记忆这些值以便不必重新计算它们。

有关此方法的更多信息,请参阅Computing Derived Data

+0

我有时会发现,我想在状态更新之前使用验证业务逻辑中选择器的派生数据。你在哪里推荐做需要选择器数据的验证? –

允许总和行动的数据的逻辑:从mapDispatchToProps

  1. 呼叫动作
  2. API调用>获得从web服务(JSON有效载荷)的数据变换
  3. 或应用某些数据操纵在一个佣工/无论...
  4. 调度行动
  5. 通过专用的减速器将数据添加到您的商店
  6. mapStateToProps

循环已关闭。