Skip to content

startWith - Bereitstellung eines Anfangswerts ​

Der startWith-Operator ist ein Operator, der einen angegebenen Anfangswert zuerst emittiert, bevor das Quell-Observable Werte emittiert. Er wird für Zustandsverwaltung, anfängliche Anzeige, Platzhalter-Werte usw. verwendet.

🔰 Grundlegende Syntax und Funktionsweise ​

ts
import { of } from 'rxjs';
import { startWith } from 'rxjs';

of('B', 'C').pipe(
  startWith('A')
).subscribe(console.log);
// Ausgabe:
// A
// B
// C

Auf diese Weise fügt startWith zuerst 'A' hinzu, gefolgt von den Werten des Quell-Observables.

🌐 RxJS Offizielle Dokumentation - startWith

💡 Typische Anwendungsfälle ​

Es ist praktisch, wenn Sie einen Anfangswert für einen Status oder Zähler festlegen möchten. Hier ist ein Beispiel für einen Zähler, der mit dem Anfangswert 100 beginnt.

ts
import { interval } from 'rxjs';
import { startWith, scan, take } from 'rxjs';

interval(1000)
  .pipe(
    startWith(-1), // Zuerst -1 einfügen
    scan((acc, curr) => acc + 1, 100), // Inkrementieren ab Anfangswert 100
    take(10) // Insgesamt 10 Mal ausgeben
  )
  .subscribe(console.log);
// Ausgabe:
// 101
// 102
// 103
// 104
// 105
// 106
// 107
// 108
// 109
// 110

🧪 Praktisches Codebeispiel (mit UI) ​

ts
import { interval } from 'rxjs';
import { startWith, scan, take } from 'rxjs';

// Ausgabebereich
const startWithOutput = document.createElement('div');
startWithOutput.innerHTML = '<h3>Beispiel für startWith:</h3>';
document.body.appendChild(startWithOutput);

// Zähler-Anzeigebereich
const counterDisplay = document.createElement('div');
counterDisplay.style.fontSize = '24px';
counterDisplay.style.fontWeight = 'bold';
counterDisplay.style.textAlign = 'center';
counterDisplay.style.padding = '20px';
counterDisplay.style.border = '1px solid #ddd';
counterDisplay.style.borderRadius = '5px';
counterDisplay.style.margin = '10px 0';
startWithOutput.appendChild(counterDisplay);

// Wertelisten-Anzeigebereich
const valuesList = document.createElement('div');
valuesList.style.marginTop = '10px';
startWithOutput.appendChild(valuesList);

// Zähler-Stream (jede Sekunde)
interval(1000)
  .pipe(
    // Zuerst ab 100 starten
    startWith(-1),
    // Jeden Wert zum vorherigen Wert +1 hinzufügen
    scan((acc, curr) => acc + 1, 100),
    // Nach 10 Mal beenden
    take(10)
  )
  .subscribe((count) => {
    // Zähler-Anzeige aktualisieren
    counterDisplay.textContent = count.toString();

    // Wert zur Liste hinzufügen
    const valueItem = document.createElement('div');

    if (count === 100) {
      valueItem.textContent = `Anfangswert: ${count} (mit startWith hinzugefügt)`;
      valueItem.style.color = 'blue';
    } else {
      valueItem.textContent = `Nächster Wert: ${count}`;
    }

    valuesList.appendChild(valueItem);
  });

✅ Zusammenfassung ​

  • startWith ist praktisch, wenn Sie zuerst einen festen Wert einfügen möchten
  • Wird häufig für Zustandsinitialisierung, UI-Platzhalter, anfängliche Formularanzeige usw. verwendet
  • In Kombination mit scan oder combineLatest auch zur Konstruktion einer Zustandsverwaltungsgrundlage verwendbar

Veröffentlicht unter CC-BY-4.0-Lizenz.