2
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

Organization

Redux-saga のドキュメントにはない概念: multicast

Redux Saga のドキュメントを読んでいたけれども、 Channel 周りの記述で、どうも説明(ドキュメント)が足りないと思うことがあったので、その備忘録。

疑問

Redux Saga のドキュメントには、上記の通り channel の使い方が書いてある。ここで説明されている channel は、どちらかというと queue のような振る舞いをする。

一方で、例えば runSaga のドキュメント をみていると、 redux-saga 自体は、 redux store 以外にも接続しながら実行することができ、その input を司るのが channel パラメータであり、 output を司るのが dispatch のパラメータであることがみて取れる。

しかし、これはドキュメントだけを読んだ際の知識とは矛盾する。何かと言うと、 redux-saga において take を行う場合、それを行なっているすべての saga (rootSaga に合成されているすべての saga) は、単一の dispatch に対して、それぞれが結果の action を取得できる、という前提で進む。 channel が queue であった場合、これは何かがおかしい、という話になる。

回答

redux saga の channel には、普通の queue っぽい channel と、 subscribe / multi dispatch のような振る舞いをする channel がある。その実、ドキュメントの中で存在が言及されている stdChannel は、後者にあたる。

redux-saga をミドルウェアとして redux に接続した場合、 redux store から dispatch された action は、その実、 stdChannel に投入され、それに対してそれぞれの saga は take することになる。

ソースコード上は、 redux-saga の channel は multicast の概念を持っていて、それはソースコード上から確認できる https://github.com/redux-saga/redux-saga/blob/master/packages/core/src/internal/channel.js

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
2
Help us understand the problem. What are the problem?