clojurescript - om get-props 与 get-state

标签 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 来访问它。

但是,对于应用程序状态,它对我来说看起来有所不同。您始终可以在所有函数中使用应用程序状态游标,因为它是函数的顶级参数,即使您在回调中需要它,也可以将其传递。大多数示例/教程都使用 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-propsIWillReceiveProps 阶段主要(或专门)需要。 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/

相关文章:

clojure - 为组件数据中缺少的键设置初始状态

clojure - 如何在 clojure 中访问 c​​ore.cljs 中的 db.clj 方法

python - 如何使用 Node 或 ClojureScript 在命令行上的当前文件夹中启动 Web 服务器?

clojure 以编程方式命名空间映射键

node.js - 如何在构建 .cljs 时在编译时定义目标环境?

reactjs - 在 ClojureScript、Om 和 React.js 中使用内联样式字符串

syntax - Clojure — 英镑符号的含义?`

javascript - OM/ react : manipulate elements outside the render target element

ClojureScript 为多页面 Web 应用程序单独构建

clojurescript - 如何在clojurescript中创建一个json