redux-saga - 终极传奇。如何使用 addEventListener 执行操作?

标签 redux-saga saga

如何使用 addEventListener 设置 Action ?

例子如下: https://codesandbox.io/s/redux-toolkit-state-new-array-forked-t84l9?file=/src/redux/sagas/sagas.js

function* someFunc() {
// yield put(action)
}

addEventListener('event', *---what's this should be?---*)

最佳答案

通常,大多数 addEventListener 事件都连接到某些 UI,因此您只需在组件中监听该事件,然后分派(dispatch)一个操作以将数据放入 saga 中。

但是,如果您真的需要直接在 sagas 中监听某些事件,您可以使用 eventChannel为此目的。

它最终看起来像这样:

function* someFunc(event) {
    // ...
}

function* rootSaga() {
    const clickChannel = eventChannel((emitter) => {
        document.addEventListener('click', emitter);
        return () => document.removeEventListener('click', emitter);
    });
    yield takeEvery(clickChannel, someFunc);
}

您可以看到此处实现的组件和直接方法以对其进行测试: https://codesandbox.io/s/httpsstackoverflowcomquestions67683057redux-saga-how-to-put-action-using-addeventlistener-62rtr?file=/src/index.js:555-884

我使用组件方法在商店中存储名称,并使用直接方法保存鼠标坐标。

关于redux-saga - 终极传奇。如何使用 addEventListener 执行操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67683057/

相关文章:

reactjs - 我们可以重定向到 reduxSaga 吗

javascript - 在yield调用完成之前yield put被触发

c# - 服务事件与命令之间的消息传递

apache-kafka - 卡夫卡论公共(public)交通

redux-saga - 从 node_modules 导入 sagas 并将其与其他 sagas 组合

reactjs - 从 redux-saga 中调用 redux-form 调度(change)

c# - ReBus 相当于 NServiceBus Saga ReplyToOriginator

javascript - 如何从gradle调用任意方法?

javascript - MapStateToProps 到同步上下文中的组件状态

nservicebus - 如何防止多次启动 NServiceBus 传奇?