问题标签 [om.next]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
183 浏览

clojure - 查询函数在 om.next 中返回值为 nil

我目前正在尝试学习om.next

这是我拥有的代码:

我的目标是组件MainMenu必须true在控制台上写入(当前写入false)。

由于读取函数应该返回{:value :home}(应用状态的值),因此(= selected :home)应该为真。

在实践中,MainMenufalse在控制台上,因为selected有值nil

0 投票
2 回答
749 浏览

clojurescript - om.next:如何让多个组件使用协调器

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

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

我可以看到的可能选项:

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

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

这可能吗?谢谢!

0 投票
2 回答
592 浏览

clojurescript - 为什么状态更改时 Om Next 组件不会重新渲染?

正如快速入门教程所说,这似乎没有发生:

在 Om Next 中,应用程序状态更改由协调器管理。协调器接受新奇事物,将其合并到应用程序状态中,根据声明的查询找到所有受影响的组件,并安排重新渲染。

当我更改选择框时,mutate 函数会更新状态,但 App 组件的渲染函数永远不会执行。我可以在 REPL 中使用@app-state 看到状态已更改,并且我从未在应用程序的渲染函数中看到来自 prn 的控制台中的输出。这就是我在控制台中看到的全部内容:

如果我从 REPL 更新状态,(swap! app-state update-in [:current-topic] (fn [] "b"))则应用程序的渲染函数会执行。这是控制台输出:

这是完整的代码:

这是 project.clj 文件:

0 投票
1 回答
131 浏览

om - 访问 om.next 子组件状态

我刚刚拿起 om.next 并遇到了一种情况,我将一些表单输入实现为保持本地状态的组件,例如验证状态、实际输入值等——该状态已更新和访问通过om.next/update-state!om.next/get-state。这个问题似乎是当我将输入包装在父组件中的表单中时,我不确定如何获取输入组件所持有的状态。将父组件作为输入组件的属性传递会更好吗?没有父组件的情况呢?

0 投票
1 回答
114 浏览

clojurescript - 数据如何流向 Om Next 中的组件渲染函数?

组件数据是否必须从其父组件传入?或者组件查询是否允许数据直接流向组件?

我可以看到查询如何声明组件需要哪些数据。父组件是否必须检查其子组件的查询以找出要传递给它的数据?为什么许多示例都有父组件调用类似的东西(om/get-query ChildComponentClass)

0 投票
1 回答
230 浏览

clojurescript - om.next 其他组件状态的变异不会导致其他组件重新渲染

我正在更新我的一个突变中的状态,其中一部分未被此组件使用,但被另一个组件使用。当我执行 mutate 时,我看到应用程序状态在 repl 中更新,如果我导致组件由于其他原因重新渲染,它将正确显示,但我无法让 mutate 安排重新第二个组件的渲染。在下面的示例中,单击按钮应该减少第二个列表中颜色名称附近的值,但事实并非如此。

有一些示例显示在 mutate 返回中使用 :value [kk] ,但是那些会抛出错误,必须是过时的教程,因为当前格式是 :value {:keys [...]},所以说代码和一些教程。但是我找不到 om.next 的任何部分实际上使用 :keys 作为不是解构操作的关键字(因此不使用 :keys 作为实际关键字,但它是一个常用词,所以我可能在某处错过了一个)

在 repl 我看到这个应用程序状态:

我错过了什么?

0 投票
1 回答
179 浏览

clojurescript - 在 Om.next 中更新嵌套状态

我在使用 Om.next 中的输入字段中的数据更新状态时遇到问题。

在 Om.next 中读取状态是通过查询来解决的,查询使组件能够实现独立于上下文的获取状态,这很棒,因为这意味着组件不需要知道状态原子的结构,它只需要了解与它直接相关的状态原子的本地片段。

不幸的是,我无法确定在相反方向上执行此操作的方法,即基于用户与组件的交互以不将其与状态原子中组件的位置耦合的方式改变状态。

网络上的大多数示例都有 mutate 函数,它们从根开始修改状态原子中的特定路径。

所以现在我去渲染组件:

这是一个相当粗略的例子,但是当用户键入时如何更新状态,而不耦合到它存储在 path 下的事实[:badge :credentials]

读取由查询限定,但突变不是。这是一个简单的人为示例,但是当我尝试渲染和更新具有(在编码时)未知形状的嵌套树时,情况会变得更糟。

0 投票
0 回答
143 浏览

clojurescript - om.next 中的秘书路由、Ident 查询

在开始这个问题之前,我会说在 Clojure/Script 方面我仍然是一个新手,所以除了非常尖锐的问题之外,我将提出关于样式的任何一般性反馈,非常感谢使用。

我一直在用 om.next 构建一个非常简单的应用程序。对于客户端路由,我决定使用秘书。我的应用程序显示一个项目列表,目的是当您单击其中一个项目时,您可以查看详细信息。目前的实现是通过一个简单href的锚标记(例如,一个href可能看起来像/items/1,在哪里1id。这部分是因为您应该能够直接导航到详细信息 URL 以查看相同的视图。听起来很简单,但我这辈子都无法让它按要求工作。

首先,让我们看一下协调器的显着配置(为简洁起见,我已经删除了组件的实现细节render)......

精明的人会发现我正在尝试使用 links 进行思考,而这似乎正在按我的预期工作。当我添加这个组件并尝试在秘书路由后面使用它时,一切都崩溃了......

我的组件的实例Item没有收到props查询中指定的正确状态(它收到完整的app-state)。最让我困惑的是,如果我app-state在 REPL 中手动执行相同的查询,我会得到正确的数据集......

到目前为止,唯一对我有用的是绕过协调器(自己创建组件实例),将查询值app-state作为道具传递。但这意味着我不能通过调和器来改变状态,这是一个新的可怕的皱纹,对一个原本凌乱、蓬乱的难题来说是一个新的可怕的皱纹。

我在这里想念什么?虽然我有很多想法,但我最怀疑的是app-statevia的初始化om/tree->db