我一直在努力解决查询问题。假设我想要一个Root
带有多个表视图的组件。
官方教程建议- 一种方法是使用没有查询的表视图组件。然后你可以通过 props 传递它需要使用的任何数据,这很好用。
但这是非常简单的情况。在非平凡的应用程序中,您可能希望TableView
使用查询,因为在 UI 树下,您可能有一些复杂的 UI 组件结构 - 表头、页脚、行、单元格等。现在本教程建议使用一个问题:
然而,这仍然是一些简化的例子。所以假设我有:
(defmethod read :numbers/odd [_ _ _]
{:value (filter odd? (range 50))})
(defmethod read :numbers/even [_ _ _]
{:value (filter even? (range 50))})
在实际应用程序中,数据当然来自后端,Om 会将其粘贴到状态原子中(像往常一样)
现在我需要一个带有查询TableView
的组件,该组件可以呈现其中任何一个(或本例中的任何序列)。所以你看我必须以某种方式告诉组件使用状态 atom 中其他地方的数据。并且查询应该是“动态的”,所以我可以使用多个渲染不同的数据。TableView
TableView
TableViews
假设我们对 Root 有这样的东西:
(defui Root
(query [_] [{:table/odd ,,,} {:table/even ,,,}])
(render
[this]
(let [{:keys [table/odd table/even]}]
(html [:div
[:div.odds (ui-table-view odd)]
[:div.evens (ui-table-view even)]]))))
为了酿造,我省略了 Om.Next 接口
现在我有几个问题:
- 查询应该如何
Root
? - 我是否应该在
TableView
其中进行参数化查询(我可能会在状态原子中指示数据的键)?或者我还能如何告诉一个TableView
使用:numbers/odd
而另一个使用:numbers/even
? - 如果我在其中使用参数化查询,
TableView
那么如何将参数从Root
to传递TableView
? - 也许我应该通过计算道具传递数据或链接到 TableView 的数据?
- 那么我将如何使用
om/get-query
(如果子查询是参数化的)? - 读取方法会是什么样子?我需要在原子中“移动东西”
read
吗?听起来不是个好主意
有人可以给我看一个例子吗。非常感谢!。