2015-11-28 36 views
5

我有两个组件A和B.我想在页面上的这两个组件之间切换。如何查询具有联盟的组合与通过Om中的道具传递的父子树一起工作Next Next

(defui A) 
(defui B) 

一种解决方案是使用一个父组件C:

(defui C 
    (render 
    (let [{:keys [activeView]} props] 
    (if (= activeView 'A') 
     (renderA) 
     (renderB))))) 

问题是查询。 C需要查询A和B,即使其中一个显示。

我需要C或者不参与查询,或者只查询A或B.

这些是真实的,还是有变通方法:

  • 子组件只能查询它的道具,这是由其父母传给。
  • 父组件必须查询其子组件,以便它可以将它们传递给子组件。
  • 只有根组件查询app-state

回答

2
  • 子组件只能查询它的道具,这是由其父母传给。

    • 在你的上下文中,是的,这是真的。但是,它也可以通过使用链接来访问顶级的状态键。有关更多信息,请参阅此tutorial
  • 父组件必须查询其子组件才能将它们传递给子组件。

    • 更好地说,父组件聚合他们孩子的查询,组成到根。根组件需要具有对应用程序的完整查询(这是“查询组成根”的意思)
  • 只有根组件查询应用程序状态。

    • 不完全。根组件将获得所有道具并负责将其传递给子组件,但“查询应用程序状态”本身是在解析器的read方法中完成的。

我劝你不要在Om Next Wiki所有教程更好地理解如何做正确的事情。

关于您的具体问题,您始终可以使C实现IQueryParams并在查询参数中具有当前子组件的(A或B)查询。