Вообще говоря, большая часть использования tap
касается жестких лайнеров RxJS.
Самая большая проблема, с которой я столкнулся, заключается в том, что вы действительно должны изменять состояние своего приложения (субъекта поведения) с помощью подписки, а не касания. В настоящее время у вас нет подписчиков на list$
. Если никто не подпишется, ваш tap
никогда не будет работать. С другой стороны, если на list$
будет два подписчика, то ваши касания будут выполняться дважды для каждого события! Вы могли бы смягчить это с помощью publish
где-нибудь, но я думаю, что было бы намного чище, если бы вы только что ...
this.listSubject = new BehaviorSubject(['a','b','c']);
this.addSubject = new Subject<string>();
this.addSubject.subscribe(itemToAdd => {
const currentValue = this.listSubject.value;
currentValue.push(itemToAdd);
this.listSubject.next(currentValue);
});
this.removeSubject = new Subject<number>();
this.removeSubject.subscribe(indexToRemove => {
const currentValue = this.listSubject.value;
currentValue.splice(indexToRemove, 1);
this.listSubject.next(currentValue);
});
Второе (немного меньшее) беспокойство, которое у меня есть, заключается в том, что выиспуская свой список из нескольких предметов. Теперь у вас есть три предмета, каждый из которых может выдавать один и тот же список. Это означает, что у вас есть три потенциальных источника правды. Вы также нарушаете CQS (разделение командных запросов). Когда что-то вызывает addItem
, ему не нужно захватывать новое значение списка. Вместо этого все, что потребляет список, просто получит обновление, потому что тема вашего списка обновлена.
Дополнительное чтение: в вашем приложении здесь есть состояние (список) и события, которые могут изменять состояние. Или, в более общем смысле, «действия», которые могут изменить ваше состояние. В таком инструменте, как ngrx
, вы увидите такие понятия, как «магазины» (ваше состояние) и «действия» (ваши события) для описания этой модели. Предметы поведения - легкая альтернатива чему-то вроде ngrx
магазина. По мере того, как ваше приложение становится все более и более сложным, вы можете извлечь немалую пользу от изучения таких инструментов, как ngrx store.