前提
[前提]
言語 : JavaScript (or TypeScript)
フレームワーク: React
データベース : Firestore
具体的な状況
オンライン講座のシステムを作っています。
「講座」のデータは以下のような階層構造でデータを保持します。
Course > Section > Chapter > lecture
データ構造に関して具体例をあげますと、
- (Course) JavaScriptコース
- (Section) 第1部 JavaScriptの基礎
- (Chapter) 第1章 変数と定数
- (Lecture) 講座1 変数を宣言する
というようなデータを保持します。
Firestore上では、素直にサブコレクションを用意して、
Courses > Sections > Chapters > Lectures
という構造でデータをもたせています。
実現したいこと
Courses/Sections/Chapters/Lecturesの
すべての階層を一覧で表示したいため、
このデータを階層構造を保持した状態で、
Fetchしたいと考えています。
できればonSnapshotを使って、
リアルタイムリスナーでデータを取得したいと思ってます。
問題
前述の件を実現しようとすると、以下の手順で、データを取ってくる必要があります。
Course情報を取得する (リアルタイムリスナー) ↓ Course情報の取得を待つ ↓ Course情報が保持するSection情報を全件取得する(リアルタイムリスナー) ↓ Section情報の取得を待つ ↓ Section情報をループして、 各Section情報に紐づくChapter情報を全件取得する(リアルタイムリスナー) ↓ 以下Chapter,Lectureと同様のことをします。
これを実現しようとすると、
1. 毎回異なる数のリスナーを発行する必要がある。
2. すべてのリスナーに対してそのデータを格納する変数が必要になるため、その都度useStateを置く必要がある。
(可変な数の useStateを用意する。。)
となります。
うまく問題の具体例が出せず申し訳ないのですが、
複数のリアルタイムリスナーを連鎖させて実行させる場合の設計が作れない
という状況です。
リアルタイムリスナーは諦めた方が良いでしょうか。
アドバイスをいただけますと幸いです。
あなたの回答
tips
プレビュー