take(eventChannel) 采取所有行动而不是发出的结果

take(eventChannel) taking all the actions instead of the emitted result

我正在尝试使用 redux-saga 中的事件通道订阅 firebase onAuthStateChanged,我设法放置了一个显示状态的沙箱

https://codesandbox.io/s/42kwzv2324

sagas/sagas.js 中的第 71 和 72 行,我正在记录 take 的结果,我发现记录的是所有操作而不是用户从事件通道发出。

我做错了什么?我无法调试,因为未命中 onAuthStateChanged 回调中的日志。

沙箱中的主要问题是您错误地导入了 eventChannel。

变化:

import eventChannel from "redux-saga";

收件人:

import {eventChannel} from "redux-saga";

在您当前的代码中,您正在创建新的 saga 中间件而不是 eventChannel。 Saga中间件是一个函数,是take支持的参数。由于 saga 中间件函数总是 returns 真值,因此 take 效果会为每个已分派的动作触发。