天天看點

為什麼在大型 Angular 應用裡我們需要使用 ngrx

參考 ngrx 官網:

https://ngrx.io/guide/effects#registering-root-effects

Comparison with component-based side effects

在基于服務的應用程式中,您的元件通過許多不同的服務與資料互動,這些服務通過屬性和方法公開資料。 這些服務可能依賴于管理其他資料集的其他服務。 您的元件使用這些服務來執行任務,進而賦予您的元件許多職責——違反了設計的單一職責原理。

想象一下,您的應用程式管理電影。 這是一個擷取并顯示電影清單的元件。

為什麼在大型 Angular 應用裡我們需要使用 ngrx

service 實作,負責讀取 movies:

為什麼在大型 Angular 應用裡我們需要使用 ngrx

這一個小小的 Component,就做了如下許多事情:

管理電影的狀态。

使用該服務執行副作用,通路外部 API 以擷取電影。

更改元件内電影的狀态。

引入 Store 和 Effect 的好處

與 Store 一起使用時,Effects 會減少 Component 的責任。 在更大的應用程式中,這變得更加重要,因為您有多個資料源,需要多個服務來擷取這些資料,而服務可能依賴于其他服務。

Effects 處理外部資料和互動,允許您的服務實作達到 less stateful 的效果,并且隻執行與外部互動相關的任務。 接下來,重構元件以将共享的電影資料放入 Store。 Effects 處理電影資料的擷取。

重構後的 Component 實作:

為什麼在大型 Angular 應用裡我們需要使用 ngrx

電影仍然通過 MoviesService 擷取,但現在元件不再關心如何擷取和加載電影。 它隻負責聲明其加載電影的意圖,并使用 selector 通路電影清單資料。

Effects 是擷取電影的異步活動發生的地方。 您的元件變得更容易測試并且對它需要的資料負責。

繼續閱讀