Firebase child_added は新しいアイテムのみ対象です 質問する

Firebase child_added は新しいアイテムのみ対象です 質問する

私は Firebase と Node を Redux で使用しています。次のようにキーからすべてのオブジェクトを読み込んでいます。

firebaseDb.child('invites').on('child_added', snapshot => {
})

この方法の背後にある考え方は、データベースからペイロードを取得し、1 つのアクションのみを使用して、Reducer を介してローカル データ ストアを更新するというものです。

次に、新しいまたは更新しましたキーの子供たちは招待します。しかし、現在の問題は、子供が追加された既存のすべてのキーと新しく追加されたキーに対してイベントがトリガーされます。この動作は不要です。既存のデータを取得しているので、新しいキーのみが必要です。

このタイプの操作には通常、child_added が使用されることは承知していますが、実行されるアクションの数と、その結果としてトリガーされるレンダリングの数を減らしたいと考えています。

この目標を達成するための最善のパターンは何でしょうか?

ありがとう、

ベストアンサー1

制限メソッドは非常に優れていて効率的ですが、child_added取得される最後のアイテムの にチェックを追加する必要があります。また、まだそうであるかどうかはわかりませんが、以前に削除されたアイテムから「古い」イベントを取得する可能性があるため、これについても を監視する必要があるかもしれません。

他の解決策としては、次のいずれかが考えられます。

追加された古いオブジェクトがコールバックを呼び出さないようにブール値を使用します

let newItems = false

firebaseDb.child('invites').on('child_added', snapshot => {
  if (!newItems) { return }
  // do
})

firebaseDb.child('invites').once('value', () => {
  newItems = true
})

この方法の欠点は、何もしないイベントを取得することになるということですが、それでも初期リストが大きい場合は問題が発生する可能性があります。

または、招待状にタイムスタンプがある場合は、次のようにします。

firebaseDb.child('invites')
  .orderByChild('timestamp')
  .startAt(Date.now())
  .on('child_added', snapshot => {
  // do
})

おすすめ記事