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
// CAuf 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
startWithist 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
scanodercombineLatestauch zur Konstruktion einer Zustandsverwaltungsgrundlage verwendbar