我试图理解两个 OM 函数 get-state 和 get-props 的用途。看看下面的例子:
(defn example [app owner]
(reify
om/IInitState
(render-state [this state]
(println "app-state: " app )
(println "state: " state )
(println "get-props: " (om/get-props owner) )
(println "get-state: " (om/get-state owner) )
(dom/div nil "hello"))))
您会注意到 app
和 state
包含 get-props
和 get-state
返回的内容,乍一看这似乎相当多余。
现在,并非所有生命周期函数(例如 IWillMount
)都会传递 state
参数,因此当您在这种情况下需要它时,显然您需要调用 om/get-state
来访问它。
但是,对于应用程序状态,它对我来说看起来有所不同。您始终可以在所有函数中使用应用程序状态游标,因为它是函数的顶级参数,即使您在回调中需要它,也可以将其传递。大多数示例/教程都使用 get-state
但我找不到 get-props
的示例。 get-props 是多余的吗?我会在哪里使用它?
还有一件事与这个构造有关。在 React 中我们有 props 和 state,但是在 OM 中我们有 app-state 和 state(内部状态),这让我在学习 OM 时感到困惑。在 React 中 props 从父级传递给子级,同样在 OM 中我们将应用程序状态(游标)传递给子级。以下观察是否有效?
- app-state 相当于 React 的 props 的 OM
- React 中的 props 只是数据,而 OM 中的 app-state 是包裹在游标中的数据
- 这意味着 OM 没有 props,只有应用程序状态游标,因此函数
get-props
实际上意味着get-app-state
最佳答案
根据文档,get-props
在 IWillReceiveProps
阶段主要(或专门)需要。 will-receive-props 获取一个 next-props 参数,其中包含 future 的应用程序状态/属性。 get-props
为您提供当前的应用程序状态/属性,以便您可以比较两者。
来自the Om docs对于IWillReceiveProps
:
In your implementation if you wish to detect prop transitions you must use
om.core/get-props
to get the previous props. This is because your component constructor function is called with the updated props.
因此,在其余时间,get-props
不是必需的,因为正如问题中提到的,您可以访问光标。
关于clojurescript - om get-props 与 get-state,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25323725/