我很难理解我应该在Redux / React app中构建一些功能。
我的场景如下,在我当前的应用程序中,我有几个JS类,它们包含特定的json对象,并提供了根据特定条件获取数据的各个部分的方法。例如,他们有一个getProperty(' name')方法,该方法查找当前主机环境并返回该主机的正确子属性值。
在Redux应用程序中实现此逻辑的正确位置在哪里?理想情况下,我希望将其封装在模型中,以便其他开发人员不需要在每个视图中重新实现它。
将json数据转换为我的数据加载操作中的类,并通过reducer将其存储在商店中是对的吗?如果是这样我怎么能确定状态不会通过类中的setter方法变异?
任何帮助/意见表示赞赏。
答案 0 :(得分:10)
如果要转换视图的模型数据,则在reducers之外执行此操作是合适的。通常我们建议您导出带有当前state
的函数(以及可能的其他参数,例如您的environment
)并返回视图所需的任何内容,例如getVisibleTodos(state)
。这些功能可以与你如何组成减速器类似,事实上,我们建议将它们与减速器一起定义,这样你就不会忘记在你的状态变化时改变它们。
shopping cart example演示了这种方法。但是,在每次状态更改时重新计算所有派生状态都是低效的。这就是为什么我们建议使用像Reselect这样的库,它允许您将选择器函数组合为其他选择器函数的依赖关系,并记住这些值,以便在没有必要的情况下重新计算它们。
有关此方法的详情,请参阅Computing Derived Data。
答案 1 :(得分:0)
将json数据转换为我的数据加载中的类 动作并通过reducer存储在商店中是对的吗?
我认为你的陈述非常接近,让我们添加一些注意事项。
reducer不是处理任何此类逻辑的正确位置,因为它只需要返回一个新的状态对象。
您的操作创建者应该处理操作,因此如果需要某些API操作或数据操作,操作创建者是处理它的最佳位置。
当您使用redux thunk中间件时,您可以实现更多功能性动作创建器。
如果我理解正确,你已经有了在js文件中处理JSON数据的逻辑。如果您愿意,我会将这些文件视为我自己的专有库或API。将其包含到我的动作创建者中,并在js lib / API中调用适当的方法,以从JSON中获取正确的数据或转换的数据。
然后我将获取此数据并将其传递给reducer并将数据置于状态。
通过这种方式,您可以重复使用现有的js文件,还可以共享团队中的操作创建者。
如果是这样,我怎么能确定国家不会通过二传手变异 班里的方法?
您不应将所有数据都放入您的州。保留js文件中的逻辑,并将处理程序函数映射到操作创建者中的操作。因此,如果需要操纵,请启动正确的操作。仅保留与状态对象中的应用程序状态相关的数据。
答案 2 :(得分:0)
让我们总结一下数据逻辑:
循环已关闭。