【发布时间】:2016-08-09 23:01:10
【问题描述】:
我使用 redux-saga 的主要原因之一是它进行异步函数调用的可测试性。我的困境是,当我使用不属于我的 redux 存储的有状态对象进行编程时,使用 sagas 进行编程变得非常尴尬。是否有处理非纯数据对象和 redux-saga 的最佳实践?
假设我在 API 中注册了回调函数,在这种情况下是 firebase,我需要保留这些回调函数,以便以后取消注册。我无法将这些回调函数存储在 redux 中,那么将其写成 saga 还有意义吗?
在一段代码中似乎有点奇怪,以便能够使用诸如 put、select 之类的东西,而在其他代码中我必须使用 store.dispatch。
例子:
const childAddedTrigger = (dataSnapshot: firebase.database.DataSnapshot) => {
const message = Object.assign({}, dataSnapshot.val(), {
key: dataSnapshot.key,
});
service.store.dispatch(Actions.channelMessageAdded(channelId, message));
}
service.firebase.database().ref(`channels/${channelId}/messages`)
.limitToLast(20)
.on('child_added', childAddedTrigger);
this.channelSubscriptions[channelId] = childAddedTrigger;
【问题讨论】:
-
你能举个例子来说明你的烦恼吗?
-
添加了一个快速示例,我想保存回调函数以便以后取消注册。我可以用更统一的传奇方式来写这个吗?
-
生成器无法跟踪回调完成。没有比“on”更漂亮的方式来使用 firebase。
-
我应该把这些回调放在哪里?我不能把它们放在redux中。如何在不使用 redux store 的情况下继续使用 saga 函数的格式?
-
我的意思是你不能。您必须满足于使用 sagas 来侦听回调调度的操作。如果您想坚持使用 firebase 节点侦听器,则实际上无法使用 dispatch 方法。
标签: redux-saga