om get-props vs get-state

时间:2014-08-15 08:53:39

标签: clojurescript om

我试图掌握两个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来获取访问它。

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

还有一件事与这个结构有关。在React中我们有道具和状态,但在OM中我们有app-state和state(内部状态),这在学习OM时会让我困惑。 Props在React中从父节点传递给子节点,同样在OM中我们将app-state(游标)传递给子节点。以下观察结果是否有效?

  • app-state是与React'道具
  • 相当的OM
  • props是React只是数据,而OM中的app-state是包含在游标中的数据
  • 这意味着OM没有道具,只有app-state游标,因此函数get-props实际上意味着get-app-state

1 个答案:

答案 0 :(得分:2)

根据文档,get-props阶段大多数(或专门)需要IWillReceivePropswill-receive-propsnext-props获取get-props参数,其中包含未来的app-state / props。 IWillReceiveProps为您提供当前的app-state / props,以便您可以比较两者。

来自om.core/get-props的{​​{1}}:

  

在您的实施中,如果您希望检测道具过渡   必须使用get-props来获取以前的道具。这是   因为你的组件构造函数被调用了   更新的道具。

所以剩下的时间{{1}}是不必要的,因为如问题所述,您可以访问光标。