2

我试图掌握两个 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"))))

您会注意到appstate包含确切的内容get-propsget-state返回,乍一看似乎非常多余。

现在,并不是所有的生命周期函数(例如IWillMount)都传递state参数,所以当你在这种情况下需要它时,很明显你需要调用om/get-state它来访问它。

但是,对于应用程序状态,它看起来与我不同。您始终可以在所有函数中使用应用程序状态光标,因为它是函数的顶级参数,即使您在回调中需要它,您也可以将其传递。大多数示例/教程都使用了,get-state但我找不到get-props. get-props 是多余的吗?我会在哪里使用它?

还有一件事与这个结构有关。在 React 中,我们有 props 和 state,但在 OM 中,我们有 app-state 和 state(内部状态),这让我在学习 OM 时感到困惑。Props 在 React 中从父级传递给子级,同样在 OM 中,我们将应用状态(游标)传递给子级。以下意见是否有效?

  • app-state 是 React 的 props 的 OM 等价物
  • props 是 React 只是数据,而 OM 中的 app-state 是包裹在游标中的数据
  • 这意味着 OM 没有道具,只有应用状态游标,因此该函数get-props真正意味着get-app-state
4

1 回答 1

2

根据文档,该阶段get-props主要(或完全)需要。获取一个参数,其中包含未来的应用状态/道具。为您提供当前的应用程序状态/道具,以便您可以比较两者。IWillReceivePropswill-receive-propsnext-propsget-props

来自OmIWillReceiveProps文档:

在您的实现中,如果您希望检测道具转换,您必须使用它om.core/get-props来获取先前的道具。这是因为您的组件构造函数是使用更新的道具调用的。

所以剩下的时间get-props是没有必要的,因为正如问题中提到的,您可以访问光标。

于 2014-08-16T08:49:00.680 回答