Cycle.js/xstream 点击事件流式传输一次,但触发两次

Cycle.js/xstream click event streamed once, but fired twice

页面上有一个按钮元素和以下点击流:

let submitClick$ = sources.DOM.select(buttonSel)
  .events("click")
  .mapTo(true)
  .debug(console.log)

单击按钮后,true 被记录,这是正确的。

但是,当我映射流时,里面的代码运行了两次:

let submitDeal$ = submitClick$.map(() => {
  console.log("Clicked")
  // ...
})

按钮不应附加其他事件处理程序,元素本身位于 div:

button(".btn--add", "Submit")

通常的 event.preventDefault()event.stopPropagation() 没有区别,检查事件确实表明它是从同一元素触发的 button.btn--add.

不太确定发生了什么,欢迎提供任何想法!谢谢!

版本:

"@cycle/dom": "^12.2.5"
"@cycle/http": "^11.0.1"
"@cycle/xstream-run": "^3.1.0"
"xstream": "^6.4.0"

更新 1: 我检查了三次,没有 JS 文件被加载两次。我使用的 Webpack 捆绑了加载到页面上的单个 app.js 文件(Elixir/Phoenix 应用程序)。此外,在 Chrome 的开发人员工具中检查 Event Listeners 选项卡中的按钮时,似乎只附加了 1 个已处理的事件。

更新二: Gist with the code

提供的信息太少无法解决此问题。但是我想到了一些事情:

您不应使用 .debug(console.log),而应使用 .debug(x => console.log(x))。其实.debug()就够了,内部会用console.log

那么,按钮里面是不是<form>?这可能会影响事件。一般来说,这个问题需要更多细节。

原来这是由于 xstream 中的一个错误,该错误已在 xstream@7.0.0 中修复。