1

我是 om.next (和 clojurescript)的新手,我有以下问题。我只能使用协调器调用根组件(即调用其查询方法);每个其他组件似乎都需要使用 props 和 with 调用om/factory。我想我错过了一些东西。

我正在尝试创建一个待办事项列表应用程序(原创性 100 分!),并带有一个过滤器来显示已完成/未完成/所有项目。如果我的TodoList组件是根组件,我可以使用 query: 调用它,[:todos]没有问题。我想要一个不同的根组件,并且还有一个Filter通过协调器的组件。

我可以看到的可能选项:

  • 有多个 om/add-root!调用(这可以防止我们拥有使用协调器的嵌套组件,这不是我在教程中看到的模式)

  • 将所有内容包装在一个全局组件中,并通过 props 向下传递状态。但是这些示例使 read 成为一种多方法,它与这种方法不兼容。

这可能吗?谢谢!

4

2 回答 2

1

Om Next(以及其他如 reframe)背后的概念是有一个事实来源——您的应用程序状态。使用 Om Next,应用程序的 UI 由一个(倒置的)组件树组成。在渲染过程中,您的应用程序状态Root由 Om Next 解释其静态查询加载到您的组件中。此应用程序状态作为“道具”接收。将这些道具分开并将“子道具”交给树的其余部分是您的工作。您可以在render每个组件的方法中执行此操作。

所以你的第二个选择是要走的路。reads 与静态组件查询中的关键字相关。如果您确保您的状态是默认的 db 格式,那么实际上每个read都可以以相同的方式实现,利用db->tree. 拥有一个全局组件并使每个组件都read成为多方法是不相关的概念,因此并非不兼容。事实上,两者兼而有之是非常惯用的。

您可能希望查看 ToDo 应用示例以供参考:herehere

需要注意的一件事是您的Root组件查询将使用连接来包含其他组件,因此您的查询[:todos]对我来说看起来不正确。类似的东西[{:todos (om/get-query TodoList)}]会更好:-)

于 2016-04-04T14:18:25.933 回答
1

如果您还没有,请查看组件、身份和规范化·omcljs/om Wiki·GitHub。本教程展示了如何在单个根下组织多组件应用程序 - 它还应该清楚每个单独read组件如何使用, mutate, Ident,IQuery等来协调与唯一应用程序状态的交互调和器。app-state 基本上是应用程序的数据库——在单个Map中使用嵌套的数据结构。

React 应用程序通常只有一个根组件 - 如果有多个根,它们通常由路由组织,即每个路由一个根(另请参阅顶级 React 组件 - 中)。

另外:Om/Next:调和器 — 中

于 2016-04-04T14:56:50.823 回答