2017-10-29 14 views
7

Câu hỏi của tôi liên quan đến cử & chọn từ các cửa hàng ngrx.Sử dụng các nhà xây dựng để chọn trên các cửa hàng và ngOnInit để cử từ các cửa hàng

Hãy nhìn vào đoạn mã sau từ các ứng dụng ví dụ chính thức:

export class CollectionPageComponent implements OnInit { 
    books$: Observable<Book[]>; 

    constructor(private store: Store<fromBooks.State>) { 
    this.books$ = store.select(fromBooks.getBookCollection); 
    } 

    ngOnInit() { 
    this.store.dispatch(new collection.Load()); 
    } 
} 

Tôi muốn hiểu những gì thúc đẩy lựa chọn cử từ ngOnInitchọn từ constructor.

Mọi người có thể vui lòng cung cấp giải thích không?

P.S. Nhân tiện, ở trên là mã mẫu từ ứng dụng ví dụ ngrx có thể tìm thấy tại đây: https://github.com/ngrx/platform/blob/master/example-app/app/books/containers/collection-page.ts

+0

Điều gì khiến bạn khó hiểu? Có rất nhiều cách để làm điều gì đó. Đây không phải là một cách sai lầm.Bạn có thể thực hiện tương tự với trình phân giải hoặc bằng tính năng bỏ phiếu http bắt đầu từ thời điểm khởi tạo ứng dụng của bạn hoặc nhiều cách khác ... – notANerdDev

Trả lời

-1

Lý do chính trong quan điểm của tôi là tách mối quan tâm. Nhà xây dựng là nơi bạn xác định tất cả các phụ thuộc. Vì vậy, trong trường hợp này nhận được các cửa hàng và hơn là lựa chọn một lát của nó.

Gửi một hành động mặc dù là một phần của logic có thể được tách ra khỏi các phụ thuộc (nếu có thể).

Hãy suy nghĩ về một lớp học có nhiều sự phụ thuộc và rất nhiều hành động. Điều này giúp ngăn cách mọi thứ. Mọi người sẽ đọc lớp luôn có thể xem xét hàm tạo để xem phụ thuộc là gì và không bị can thiệp với bất kỳ logic nào khác.

+0

Xin chào Wheeler. Bạn có chắc chắn đây là trường hợp? Nó không liên quan đến vòng đời của các thành phần góc và sự khác biệt giữa 'constructor' và' ngOnInit'? – balteo

+0

Nó có thể phụ thuộc nhưng tôi cũng đã sử dụng các hành động gửi đi trong hàm dựng trước khi không có bất kỳ vấn đề hoặc tác dụng phụ nào. – wheeler

0

Hàm tạo được thực hiện khi lớp được khởi tạo và đảm bảo khởi tạo đúng các trường của lớp. Đây là nơi Angular giải quyết các nhà cung cấp mà bạn có thể vượt qua dưới dạng đối số trong hàm tạo của bạn.

Móc vòng đời ngOnInit được gọi sau khi thuộc tính ràng buộc dữ liệu đã được kiểm tra lần đầu tiên (đầu vào & kết quả đầu ra của thành phần). Để được giải thích chi tiết hơn, hãy xem this question.

Động lực cho chọn từ cửa hàng ngrx trong các nhà xây dựng và cử từ ngOnInit như xa như tôi hiểu nó, là chọn là một phần của khởi bạn thành phần lớp. Vì this.books$ là một Observable, nó có nghĩa là khởi tạo nó trong hàm tạo nên nó sẵn sàng để sử dụng ngay lập tức sau khi tạo. Giả sử bookCollection.Load() phát ra một giá trị cho this.books$ bạn muốn this.books$ để có thể quan sát được các sách đó trước giá trị cuối cùng được phát ra.

Vì bạn muốn các giá trị đó được phát ra this.books$, điều này có ý nghĩa đối với công văn hành động trong ngOnInit. Bằng cách này bạn có thể chắc chắn rằng this.books$ được khởi tạo.

This answer cho một câu hỏi tương tự cũng có thể hữu ích.

Các vấn đề liên quan