如何处理事件副作用?

时间:2016-01-25 22:28:00

标签: javascript cyclejs

我正在尝试实施this React Component等dropzone。但是,我对如何对事件应用写入效果感到有些困惑,例如

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

因为没有下沉,所以没有工作。 map内的代码应该真正在接收器内执行。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

你应该编写一个简单的驱动程序来处理这个问题。请参阅有关驱动程序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'
  }))
}

简而言之:驱动程序封装了所有副作用并从这些接口返回输入,并且Rx代码中的所有副作用都被约束到subscribe参数Observers。