Redux:将派生数据保存在商店中总是不好的做法吗?
Redux: Is it always bad practice to keep derived data in the store?
我知道在 Redux 中使用选择器,并利用它们。然而,我有一个案例,我觉得将我新过滤的数据存储在商店中更有意义。这是我的例子:
我有一个显示很多项目的应用程序。有一个 "global filter" 选项只会显示这些项目的特定子集。
事实是,这个过滤器是全局的。它会跨多个页面和组件更改此项目列表(例如,在 table 中,在下拉菜单中)。设置过滤器后,就整个应用程序而言,当前子集是唯一存在的项目列表。
我可以在任何需要的地方使用选择器,但我觉得只在我的商店中使用 'filteredItems' 部分会更稳健。这样做有什么缺点?
我使用选择器 (reselect),它通过缓存派生数据和其他东西来进一步提高性能,我一直都在使用它。
为什么?
为了让我的组件尽可能小和可重用,我注意到在这样做一段时间后,您开始以更 'generic' 的方式编写组件,并且您将选择器用作一种插头适配器塑造多种类型的数据以适应一个组件。
什么时候?
使用 reselect 时的主要问题之一是设置部分,很无聊......而且并非没有努力。但是当你学习并应用重新选择模式时,阅读和维护大型应用程序将变得更加简单
所以如果你有很多计算要做和多样化的派生数据,你应该付出代价(时间,努力)并设置它,但如果你的派生数据很小,你不应该为此烦恼.
我的两毛钱
由您决定您的应用处于何种状态,以及它应该位于何处。是的,常见的建议是尽量保持存储状态最小,并使用选择器从中派生扩展值,但是使用缩减器创建保留在状态中的过滤值并没有错。你的情况听起来像是一个完全合理的用例。
我知道在 Redux 中使用选择器,并利用它们。然而,我有一个案例,我觉得将我新过滤的数据存储在商店中更有意义。这是我的例子:
我有一个显示很多项目的应用程序。有一个 "global filter" 选项只会显示这些项目的特定子集。
事实是,这个过滤器是全局的。它会跨多个页面和组件更改此项目列表(例如,在 table 中,在下拉菜单中)。设置过滤器后,就整个应用程序而言,当前子集是唯一存在的项目列表。
我可以在任何需要的地方使用选择器,但我觉得只在我的商店中使用 'filteredItems' 部分会更稳健。这样做有什么缺点?
我使用选择器 (reselect),它通过缓存派生数据和其他东西来进一步提高性能,我一直都在使用它。
为什么?
为了让我的组件尽可能小和可重用,我注意到在这样做一段时间后,您开始以更 'generic' 的方式编写组件,并且您将选择器用作一种插头适配器塑造多种类型的数据以适应一个组件。
什么时候?
使用 reselect 时的主要问题之一是设置部分,很无聊......而且并非没有努力。但是当你学习并应用重新选择模式时,阅读和维护大型应用程序将变得更加简单
所以如果你有很多计算要做和多样化的派生数据,你应该付出代价(时间,努力)并设置它,但如果你的派生数据很小,你不应该为此烦恼.
我的两毛钱
由您决定您的应用处于何种状态,以及它应该位于何处。是的,常见的建议是尽量保持存储状态最小,并使用选择器从中派生扩展值,但是使用缩减器创建保留在状态中的过滤值并没有错。你的情况听起来像是一个完全合理的用例。