redux-saga - Redux 传奇。如何使用 addEventListener 执行操作?
问题描述
如何使用 addEventListener 执行操作?
这是示例: 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,因此您只需在组件中侦听该事件,然后分派一个操作以将数据放入 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
我使用组件方法将名称存储在商店中,并使用直接方法来保存鼠标坐标。
推荐阅读
- php - 库的扩展名和二进制文件是什么意思?
- flutter - 当用户在 Flutter 中离开当前屏幕时调用函数
- ios - 相机沿x轴移动时如何限制SCNNode移动?
- javascript - 如何使用 JINJAVA 将 Java 字符串值或字符串列表传递给 javascript
- php - 来自 PHP CLI 的 gRPC 调用被卡住
- python - 如果值不存在则如何创建条件然后发生一些顺序动作,如果值不存在则发生其他动作
- google-sheets - 使用谷歌表格在图表中保持单元格引用不变?
- jquery - 使用 php 使用 ajax 上传 jquery 文件
- mysql - 两个表之间的查询慢
- javascript - 滚动 - 内容拉伸动画