redux-saga – 如何在没有redux的情况下使用redux saga?

使用redux-saga的主要原因之一是它可以测试异步函数调用.我的困境是,当我使用不属于我的redux商店的有状态对象编程时,它变得非常笨拙的编程与传奇.是否有使用非纯数据对象和redux-saga的最佳实践?

假设我有一个回调函数,我在这种情况下注册了一个API,firebase,我需要预订这些回调函数,以便我以后可以取消注册.我无法在redux中存储这些回调函数,所以将它写为传奇仍然有意义吗?

在一段代码中似乎有点奇怪,以便能够使用诸如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;

最佳答案 你会想要使用
Channels的redux-saga概念.

效果就像take,call,put这样使得异步函数很容易用redux-saga进行测试,默认情况下与redux的商店交互,因为这个库首先是一个redux中间件.

但是,eventChannel工厂函数允许您从websocket或firebase获取外部事件源并从中获取事件,而不是从商店调度并将“事件”发送给它们,而不是从redux存储中获取.

点赞