如何处理事件副作用?

How to handle event side effects?

我正在尝试实施 this React Component 之类的拖放区。但是,我对如何对事件应用写入效果有点困惑,例如

dragOver$: DOM
  .select('#dropzone')
  .events('ondragover')
  .map(e => {
    e.preventDefault()
    e.dataTransfer.dropEffect = 'copy'
  })

由于没有水槽,因此无法使用。 map 中的代码确实应该在 sink 中执行。

有什么建议吗?

您应该编写一个简单的驱动程序来处理这个问题。请参阅有关驱动程序的文档 here

看来你可以这样做:

function main(sources) {
  return {
    dragOver: DOM.select('#dropzone').events('ondragover')
  };
}

const drivers = {
  DOM: makeDOMDriver('#app'),
  dragOver: (e$ => e$.subscribe(e => {
    e.preventDefault()
    e.dataTransfer.dropEffect = 'copy'
  }))
}

简而言之:驱动程序封装了所有副作用和来自这些接口的 return 输入,并且 Rx 代码中的所有副作用都被限制在 subscribe 参数 Observers 中。