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