在 Om 应用程序中正确操作状态时遇到问题
Having trouble correctly manipulating state in Om app
我在 Om 应用程序中操作状态时遇到问题。具体来说,我不知道如何从列表中删除项目。
这是我愚蠢的证明。这是一个已损坏的简化应用程序。 https://gist.github.com/rerb/29d10959e71ba1e31e8e
显示两个按钮。按下时,它们应该自行移除。
删除第一项后,尝试删除第二项时出现此错误:
Uncaught Error: No protocol method IDeref.-deref defined for type cljs.core/PersistentArrayMap: {:id 2}
如果我先删除第二个,在尝试删除第一个时出现此错误:
Uncaught Error: Assert failed: Can't put nil in on a channel
我缺少什么简单的东西?我是 Einstellung.
函数 remove
returns 一个序列,而不是向量。您的州从 {:buttons [{:id 1} {:id 2}]}
变为 {:buttons ({:id 1})}
。通过在 remove
之后使用 into
你解决了你的问题:
(fn [buttons]
(into [] (remove #(= button-id (:id %)) buttons))))
注意:我用 Chestnut 试过这个,它似乎有效。此外,如果您以 Om 开头,请避免在开头使用 core.async。它是对 Om 的一个很好的补充,但是在学习的同时使用两者对我来说太过分了。
我在 Om 应用程序中操作状态时遇到问题。具体来说,我不知道如何从列表中删除项目。
这是我愚蠢的证明。这是一个已损坏的简化应用程序。 https://gist.github.com/rerb/29d10959e71ba1e31e8e
显示两个按钮。按下时,它们应该自行移除。
删除第一项后,尝试删除第二项时出现此错误:
Uncaught Error: No protocol method IDeref.-deref defined for type cljs.core/PersistentArrayMap: {:id 2}
如果我先删除第二个,在尝试删除第一个时出现此错误:
Uncaught Error: Assert failed: Can't put nil in on a channel
我缺少什么简单的东西?我是 Einstellung.
函数 remove
returns 一个序列,而不是向量。您的州从 {:buttons [{:id 1} {:id 2}]}
变为 {:buttons ({:id 1})}
。通过在 remove
之后使用 into
你解决了你的问题:
(fn [buttons]
(into [] (remove #(= button-id (:id %)) buttons))))
注意:我用 Chestnut 试过这个,它似乎有效。此外,如果您以 Om 开头,请避免在开头使用 core.async。它是对 Om 的一个很好的补充,但是在学习的同时使用两者对我来说太过分了。