2017-10-04 48 views

回答

1

當你說ngrx時,你是否在說ngrx商店?

如果是這樣,這是Redux專門用於Angular的實現。可能值得通過Redux introduction來了解它的全部內容。

一般來說,它是一種控制應用程序狀態和整個應用程序中數據流的模式。

以一個角度分量爲例。組件MyComponent加載一些數據「產品」。現在,無論何時,如果這個數據(狀態)存儲在MyComponent中,它就會丟失。所以,無論何時創建組件,我們都會重新加載它。效率不高,對我們不耐煩的用戶不好。

也許MyOtherComponent也獲得產品!它擁有它的產品清單。但用戶可以在這裏編輯product.name。狀態已被修改MyOtherComponent,而不知道MyComponent - 所以它仍然顯示舊名稱。我們可以讓每個人都擁有對另一個人的引用,或者讓父母獲得數據 - 但這是我們大型網絡中所有組件的開始。如果我們想要改變任何事情,這不是一個好消息。

解決方案是注入一個服務,MyProductsService處理要做的事情(讓我們稱之爲動作?),如loadData(),並將該狀態存儲在中央位置。

現在,當有人需要它時,他們會詢問MyProductsService,並加載它並提供數據。當有人修改它時,他們必須回到MyProductsService,然後就可以......啊。請看,MyProductService如何告訴它的依賴關係某人改變了狀態? MyProductsService.products已更新,但它需要將該更改「推」到MyComponentMyOtherComponent

這裏是NgRx(RxJS爲Angular設計)的用處。它使用Observable Pattern來管理「推送」數據。當有人想要products時,它作爲Observable提供,並且MyComponents訂閱更新。當它發生變化時,products觀測值會發出新的值,每個人都很高興。

現在,畢竟這已經結束了,你最終會創建一些看起來有點像Redux的東西,但它是自定義的 - 可能有錯誤,未經測試,並且你花費了數小時的時間。

因此,您可以隨時使用已經由真正聰明的人編寫的版本,並通過有用的教程進行徹底測試。它很好地遵循了最佳實踐。與之互動的方式(變異狀態)非常嚴格,因此可以防止不必要的副作用。數據以可預測,可測試和可重複的方式從頂端向下流動。

+1

_「這裏輸入RxJs(或NgRx for Angular)。」_。這聽起來像ngrx是rxjs的角度版本,而不是。 – Skeptor

+0

你說得對。我在想「這裏是你需要RxJS的地方 - 或者如果你使用的是角度,NgRx」,但我的措辭很糟糕。編輯。 – Joe

+0

非常好的解釋。做得好! –

相關問題