web-dev-qa-db-fra.com

RxJs: pousser de manière incrémentielle le flux de données vers BehaviorSubject <[]>

Fondamentalement, j'essaie de gonfler BehaviorSubject<[]> avec un tableau de données qui sera chargé en morceaux.

BehaviorSubject<[]> sera ajouté avec un nouveau bloc de données (comme Array.Push) mais je ne veux pas utiliser un autre tableau pour stocker et ajouter à BehaviorSubject.next car cela rendra le rendu trop long à mesure que les données augmentent avec le temps.

Toute suggestion?

14
Reddy

Vous pouvez utiliser la méthode getValue() pour réaliser ce que vous voulez faire.

Exemple:

data = new BehaviorSubject<any[]>([]);

addData(foo:any):void{
  // I'm using concat here to avoid using an intermediate array (Push doesn't return the result array, concat does).
  this.data.next(this.data.getValue().concat([foo]));
}
16
Supamiu

Au lieu d'utiliser concat, vous pouvez utiliser à la place l'opérateur spread:

data = new BehaviorSubject<any[]>([]);

addData(foo: any): void {
  this.data.next([...this.data.getValue(), ...foo])
}

J'ai trouvé que c'était un peu plus lisible qu'un simple concat

6
TheHanna