问题标签 [om]

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 投票
1 回答
1166 浏览

reactjs - 渲染后的 Om 回调(在更改应用程序状态后聚焦元素)

我有一个使用组件状态和应用程序状态的文本输入元素。

React: More About Refsfocus中显示的示例中,目标是在重新渲染后调用元素。这是关键部分,用 React 中的 JS 完成。

我想对Om做类似的事情。我也没注意到

  1. Om set-state!(用于更改组件状态;请参阅文档源代码),也不是

  2. Om's update!(用于更改应用程序状态;请参阅文档源代码

提供了指定回调的方法。所以我正在寻找其他方法来在重新渲染后导致某些事情发生。

这是我的例子:

(注意:parse-int未显示,“清理”组件状态,使其适合应用程序状态。)

更改文本输入的组件状态不会导致它失去焦点,但改变应用程序状态会。

我尝试过使用 core.async 通道,但这似乎没有帮助,因为我只希望在重新渲染完成后发生回调。

我也尝试过使用IDidUpdate,像这样:

更新:如果仅更新组件状态,IDidUpdate生命周期事件就会触发。om/update!但是,如果应用程序状态发生变化(由于上述原因),它不会触发。

0 投票
1 回答
776 浏览

clojure - Clojurescript 交换!和多个关联

试图让一段代码看起来更好看。

我在 Clojurescript 中有以下内容:

有时更多。关于如何将其转换为更清洁的多任务的任何想法。

我正在看类似的东西:

0 投票
1 回答
766 浏览

unit-testing - 如何正确(单元)测试 Om/React 组件?

我已经开发了 Om/React 组件,但是我觉得不能用单元测试来推动我的开发真的很不舒服。我试图设置我的 clojurescript 项目来对这些组件运行单元测试,到目前为止,我已经能够编写单元测试并实例化我的组件。我缺少的是确保我的组件正确响应某些事件的能力,例如onChange,以便我可以模拟用户输入。

这是我的测试代码:

此测试运行但失败,因为该change-field!函数实际上并未更改组件的状态。这是组件的(部分)代码(原谅重复......):

通过在测试中放置跟踪我可以看到,当我触发change事件时,组件的状态没有更新,尽管它被正确触发了。我怀疑这与 Om/React 的工作方式有关,包装 DOM 组件,但不确定如何处理。

0 投票
2 回答
972 浏览

clojurescript - Om 应用程序状态和应用程序结构

我在 Om 中显示一个菜单,使用这样的组件和子组件:

我的问题是如何更新 (@app-state :location) 并正确重新呈现菜单?

上面代码中的更新:

确实有效,但树没有正确更新。

我怀疑我需要使用 om/update!或 OM/交易!但他们有一个光标,我在菜单项视图中唯一的光标是当前菜单项,而不是完整的应用程序状态。所以我无法访问:location。

这是如何处理的?

如果可能的话,我宁愿暂时避免 core.async 和频道。

0 投票
1 回答
2080 浏览

reactjs - React 在 Reagent(或 Om)中的 Refs?

我有时发现使用 React 的Refs来更改 DOM 的状态很有用,例如在渲染组件后聚焦输入字段。ReagentOm是否实现了这一点,或者如果没有,在这些库中执行此操作的惯用方式是什么?

编辑(在下面的讨论之后)。

this.getDOMNodein的使用componentDidMount不是解决这个问题的通用方法。它只允许在安装组件后访问物理 DOM 元素。有时,每次调用渲染后都需要对元素进行一致的访问——例如触发事件。做到这一点的方法是通过 Refs。

0 投票
1 回答
822 浏览

reactjs - 在 om 组件中使用 core.async / ajax 数据

我目前正在试验 om 并尝试加载外部数据以在组件中显示它。

我的详细信息组件:

fetch-something正在从 API 检索数据)。

总而言之,detail-component 在挂载之前获取数据,将其附加到app并构建another-componentanother-component然后从该数据中取出描述并显示它。

但是,在执行时,Uncaught TypeError: Cannot read property 'call' of null我正试图访问描述。这向我表明,在another-component构建时,数据还不存在并且它失败了。

当数据可用时,我如何告诉 om 构建应用程序?还是我必须建立一些nil?检查?

0 投票
2 回答
532 浏览

clojure - 尝试使用 om/transact 更新向量时 om ClojureScript ref-cursor 错误

尝试更新游标时看到以下错误:

我正在使用 ref-cursor 指向我的应用程序状态中的注释数据向量:

现在,当用户通过我的输入组件中的输入提交一些数据时,我想更新这个光标。我使用 (let [foo (->> comments)] 来引用渲染状态中的光标。我将它传递给处理用户提交的函数调用,我想简单地向这个向量添加一个项目。

但是,当我进行 om/transact! 打电话给我看到上面的错误。

0 投票
1 回答
1506 浏览

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

我想在我的 ClojureScript 应用程序中使用这个 Om 片段:

这会“爆炸”并停止整个页面的整个渲染!

我认为原因与 React.js 处理样式的方式有关。根据内联样式

在 React 中,内联样式不指定为字符串。相反,它们是用一个对象指定的,其键是样式名称的驼峰式版本,其值是样式的值,通常是一个字符串

有什么好的方法可以解决这个问题?我通常不喜欢使用内联样式,但我想知道如何使这个示例工作。

0 投票
1 回答
294 浏览

clojurescript - will-mount 中的transact app-state 无效

这个问题最好用一个例子来解释:

然后粘贴以下代码(在core.cljs

中的代码will-mount实际上正在执行,如果你放入一个println函数,那么你会看到。不清楚的是为什么渲染循环只被调用一次。另一方面,如果您将 包装om/update!在一个go块中,那么它会按预期工作:

问题是:为什么不will-mount触发新的渲染循环,因为我更新了应用程序状态?我喜欢go在需要时使用块,但我不明白为什么我不得不将这个简单的示例包装在一个块中。

0 投票
2 回答
1847 浏览

clojurescript - 如何使用 Clojurescript 将文本转换为 DOM 元素?(还有 Om?)

在 ClojureScript/Om 应用程序中,我有一个 DOM 和一个 HTML 字符串。

如何将该 HTML 字符串转换为可以插入 DOM 的元素?

我已经开始使用 hickory 解析 HTML,计划然后处理 hickory 数据以创建 DOM 元素,但我认为必须有一种更简单的方法我忽略了。

(我不需要验证 HTML,我可以假设它足够安全和​​有效。)