如何处理事件副作用?
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 中。
我正在尝试实施 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 中。