Решил сегодня почитать, что пишут в Ангуляр комьюнити Хабра, и увидел сильно популярный пост с аж 51 лайком и 71 закладкой.
Начал читать и был удивлен примерами. Автор с уверенностью говорит, как писать на Ангуляр грамотно, и при этом приводит плохие практики в качестве примеров. Я дошел до примера с RxJS, который меня немного триггернул.
Не буду разбирать все кейсы указанные в данном посте, покажу лишь самый плохой пример который меня немного тригернул:
Автор условно говорит, что у нас есть плохой пример использования:
this.http.get('/api/data').subscribe((data) =>; { this.data = data; // Что если запрос не вернётся? });
и затем приводит хороший пример с сигналами и RxJs:
readonly data = signal([]); readonly error = signal(null); loadData() { this.http.get('/api/data').pipe( tap(() =>; this.error.set(null)), // Сбрасываем предыдущую ошибку перед загрузкой catchError((err) =>; { this.error.set('Не удалось загрузить данные'); return of([]); // Возвращаем пустой массив, чтобы поток не прерывался }) ).subscribe((result) =>; { this.data.set(result); }); }
я даже не буду указывать на количество антипатернов и плохих практик в данном примере, я просто покажу правильный пример с сигналами и RxJs:
interface State<T = object> { data: T[]; error: string | null; } @Component({...}) export class BestRxJs { private http = inject(HttpClient); private loadDataAction$ = new Subject<void>(); private state$ = this.loadDataAction$.pipe( switchMap(() => this.http.get<State[]>('/api/data').pipe( map((result) => ({ data: result, error: null })), catchError(() => of({ data: [], error: 'Не удалось загрузить данные' })), startWith({ data: [], error: null }) ) ), shareReplay({ bufferSize: 1, refCount: true }) ); readonly private state = toSignal(this.state$, { initialValue: { data: [], error: null } }); readonly protected data = computed(() => this.state().data); readonly protected error = computed(() => this.state().error); protected loadData(): void { this.loadDataAction$.next(); } }
Этот пост для новичков, которые, начитавшись популярных статей, могут начать применять вредные практики.
