我在jQuery应用程序中第一次使用Redux,我创建了一个小的可观察实现.observable正在响应状态对象的多个属性的更改,在状态本身发生更改时对DOM进行更改.如果我的可观察回调需要2个属性值来完成它的任务,我将观察这两个值,然后使用这些值来更新UI.可观察者根本不接触国家.它们只是在回调中将它呈现给observable,因此可以用它来更新状态的UI.
我正在研究的项目是一个重构器,所以我在事后添加了Redux.有时,我意识到我需要一段代码中的特定状态属性,我可能没有时间正确地重构为一个可观察的.在那些情况下,我打电话getState给商店以获得我需要的东西并继续前进.我不禁觉得这种做法有点瑕疵.
store.getState我在哪里使用它被认为是一种反模式?他们在使用时应该避免明确的用例store.getState吗?
当你使用store.getState()得太随意时,你最终会将全局状态传递给随机组件。您面临着在彼此无关的状态组件和部分之间引入耦合的风险,这是反模式。您应该仅getState出于两个原因进行调用:获取应用程序的初始状态,以及在商店的更新逻辑中 - 即在回调中store.subscribe()。
就您的可观察量而言,在典型的基于组件的视图层(例如 React)中,您在 Redux 应用程序中真正需要观察的唯一事情是整个应用程序状态,而不是其中的各个部分。整个状态的更改都会被订阅并从顶层组件向下传递。
然而,由于您正在重构 Jquery 应用程序,我认为您使用可观察量是可以接受的。如果您不想自己动手,可以使用一个名为reselect的库来实现此目的。它可以帮助您从全局状态的任意部分计算状态,并提供有效的记忆,因此相同的输入不会被重新计算。
有时,我意识到我需要一段代码中的特定状态属性,但我可能没有时间将其正确重构为可观察的。在这些情况下,我会在商店中调用 getState 来获取我需要的内容并继续使用它。我不禁觉得这种方法有点缺陷。
在这种情况下,您可以实现的一种简单的嵌入式解决方案是在化简器中使用事件发射器将全局状态的各个部分传播到需要它们的特定 Jquery 组件。这将使您不必传递全局状态,从而保持组件隔离。