在 Redux 中使用 getState 是一种反模式吗?
Is using getState in Redux an anti-pattern?
我第一次在 jQuery 应用程序中使用 Redux,并且我创建了小型可观察实现。可观察对象响应状态对象的多个属性的变化,当状态本身发生变化时对 DOM 进行更改。如果我的可观察回调需要 2 个 属性 值来完成它的任务,我将观察这两个值,然后使用这些值来更新 UI。可观察对象根本不触及状态。他们只是将它呈现给回调中的可观察对象,以便它可以用于更新 UI 状态。
我正在做的项目是一个重构,所以我在事后添加了 Redux。有时,我意识到我需要一段代码中的特定状态 属性,我可能没有时间将其正确重构为可观察对象。在这些情况下,我会在商店中致电 getState
以获取我需要的东西并继续使用它。我不禁觉得这种方法有点缺陷。
在我需要的地方使用 store.getState
是否被视为反模式?使用 store.getState
时我应该避免使用它们的明确用例吗?
当您过于随意地使用 store.getState()
时,您最终会将全局状态传递给随机组件。您 运行 存在在组件和状态的各部分之间引入彼此无关的耦合的风险,这是反模式。您应该只调用 getState
有两个原因:获取应用程序的初始状态,以及在您商店的更新逻辑中 - 即在您的 store.subscribe()
回调中。
就您的可观察对象而言,在典型的基于组件的视图层(例如 React)中,您在 redux 应用程序中真正需要观察的唯一事情是整个应用程序状态 作为一个整体,不是它的个别片段。对整个状态的更改被订阅并从顶级组件向下渗透。
但是,由于您正在重构 Jquery 应用程序,我认为您对 observables 的使用是可以接受的。如果您不想自己动手,可以使用一个名为 reselect 的库来实现此目的。它可以帮助您从全局状态的任意部分计算状态并提供高效的记忆,因此不会重新计算相同的输入。
At times, I realize I need a specific state property in a piece of code that I may not have the time to properly refactor into an observable. In those instances, I call getState on the store to get what I need and move on with it. I can't help feeling like this approach is a little flawed.
在这种情况下,您可以实施的一个简单的嵌入式解决方案是在您的 reducer 中使用事件发射器将全局状态的片段传播到需要它们的特定 Jquery 组件。这将使您不必传递全局状态,从而保持组件隔离。
我第一次在 jQuery 应用程序中使用 Redux,并且我创建了小型可观察实现。可观察对象响应状态对象的多个属性的变化,当状态本身发生变化时对 DOM 进行更改。如果我的可观察回调需要 2 个 属性 值来完成它的任务,我将观察这两个值,然后使用这些值来更新 UI。可观察对象根本不触及状态。他们只是将它呈现给回调中的可观察对象,以便它可以用于更新 UI 状态。
我正在做的项目是一个重构,所以我在事后添加了 Redux。有时,我意识到我需要一段代码中的特定状态 属性,我可能没有时间将其正确重构为可观察对象。在这些情况下,我会在商店中致电 getState
以获取我需要的东西并继续使用它。我不禁觉得这种方法有点缺陷。
在我需要的地方使用 store.getState
是否被视为反模式?使用 store.getState
时我应该避免使用它们的明确用例吗?
当您过于随意地使用 store.getState()
时,您最终会将全局状态传递给随机组件。您 运行 存在在组件和状态的各部分之间引入彼此无关的耦合的风险,这是反模式。您应该只调用 getState
有两个原因:获取应用程序的初始状态,以及在您商店的更新逻辑中 - 即在您的 store.subscribe()
回调中。
就您的可观察对象而言,在典型的基于组件的视图层(例如 React)中,您在 redux 应用程序中真正需要观察的唯一事情是整个应用程序状态 作为一个整体,不是它的个别片段。对整个状态的更改被订阅并从顶级组件向下渗透。
但是,由于您正在重构 Jquery 应用程序,我认为您对 observables 的使用是可以接受的。如果您不想自己动手,可以使用一个名为 reselect 的库来实现此目的。它可以帮助您从全局状态的任意部分计算状态并提供高效的记忆,因此不会重新计算相同的输入。
At times, I realize I need a specific state property in a piece of code that I may not have the time to properly refactor into an observable. In those instances, I call getState on the store to get what I need and move on with it. I can't help feeling like this approach is a little flawed.
在这种情况下,您可以实施的一个简单的嵌入式解决方案是在您的 reducer 中使用事件发射器将全局状态的片段传播到需要它们的特定 Jquery 组件。这将使您不必传递全局状态,从而保持组件隔离。