Tuần trước tôi đã trả lời một câu hỏi của RxJS khi tôi tham gia một cuộc thảo luận với một thành viên khác trong cộng đồng về: "Tôi nên tạo một thuê bao cho mỗi tác dụng phụ cụ thể hay tôi nên cố gắng giảm thiểu đăng ký nói chung?" Tôi muốn biết sử dụng phương pháp đo lường nào theo cách tiếp cận ứng dụng phản ứng đầy đủ hoặc khi nào nên chuyển đổi từ phương pháp này sang phương pháp khác. Điều này sẽ giúp tôi và có thể những người khác để tránh các cuộc thảo luận không liên quan.
Thông tin cài đặt
- Tất cả các ví dụ đều có trong TypeScript
- Để tập trung tốt hơn vào câu hỏi không sử dụng vòng đời / nhà xây dựng cho đăng ký và để giữ trong khuôn khổ không liên quan
- Hãy tưởng tượng: Đăng ký được thêm vào trong constructor / vòng đời init
- Hãy tưởng tượng: Hủy đăng ký được thực hiện trong vòng đời hủy
Tác dụng phụ là gì (mẫu góc)
- Cập nhật / Nhập liệu trong UI (ví dụ
value$ | async
) - Đầu ra / ngược dòng của một thành phần (ví dụ
@Output event = event$
) - Tương tác giữa các dịch vụ khác nhau trên các hệ thống phân cấp khác nhau
Usecase mẫu mực:
- Hai chức năng:
foo: () => void; bar: (arg: any) => void
- Hai nguồn quan sát:
http$: Observable<any>; click$: Observable<void>
foo
được gọi sau khihttp$
đã phát ra và không cần giá trịbar
được gọi sau khiclick$
phát ra, nhưng cần giá trị hiện tại củahttp$
Case: Tạo một thuê bao cho mỗi tác dụng phụ cụ thể
const foo$ = http$.pipe(
mapTo(void 0)
);
const bar$ = http$.pipe(
switchMap(httpValue => click$.pipe(
mapTo(httpValue)
)
);
foo$.subscribe(foo);
bar$.subscribe(bar);
Trường hợp: Giảm thiểu đăng ký nói chung
http$.pipe(
tap(() => foo()),
switchMap(httpValue => click$.pipe(
mapTo(httpValue )
)
).subscribe(bar);
Tóm lại ý kiến của riêng tôi
Tôi có thể hiểu thực tế rằng đăng ký làm cho cảnh quan Rx phức tạp hơn lúc đầu, bởi vì bạn phải suy nghĩ về việc người đăng ký có ảnh hưởng đến đường ống hay không (ví dụ như bạn có thể quan sát được hay không). Nhưng bạn càng tách mã của mình (bạn càng tập trung: điều gì xảy ra khi nào) thì càng dễ duy trì (kiểm tra, gỡ lỗi, cập nhật) mã của bạn trong tương lai. Với ý nghĩ đó, tôi luôn tạo một nguồn có thể quan sát được và một thuê bao duy nhất cho bất kỳ tác dụng phụ nào trong mã của tôi. Nếu hai hoặc nhiều tác dụng phụ tôi đã được kích hoạt bởi cùng một nguồn chính xác có thể quan sát được, thì tôi chia sẻ quan sát của mình và đăng ký cho từng tác dụng phụ riêng lẻ, bởi vì nó có thể có vòng đời khác nhau.