參考 ngrx 官網:
https://ngrx.io/guide/effects#registering-root-effectsComparison with component-based side effects
在基于服務的應用程式中,您的元件通過許多不同的服務與資料互動,這些服務通過屬性和方法公開資料。 這些服務可能依賴于管理其他資料集的其他服務。 您的元件使用這些服務來執行任務,進而賦予您的元件許多職責——違反了設計的單一職責原理。
想象一下,您的應用程式管理電影。 這是一個擷取并顯示電影清單的元件。
service 實作,負責讀取 movies:
這一個小小的 Component,就做了如下許多事情:
管理電影的狀态。
使用該服務執行副作用,通路外部 API 以擷取電影。
更改元件内電影的狀态。
引入 Store 和 Effect 的好處
與 Store 一起使用時,Effects 會減少 Component 的責任。 在更大的應用程式中,這變得更加重要,因為您有多個資料源,需要多個服務來擷取這些資料,而服務可能依賴于其他服務。
Effects 處理外部資料和互動,允許您的服務實作達到 less stateful 的效果,并且隻執行與外部互動相關的任務。 接下來,重構元件以将共享的電影資料放入 Store。 Effects 處理電影資料的擷取。
重構後的 Component 實作:
電影仍然通過 MoviesService 擷取,但現在元件不再關心如何擷取和加載電影。 它隻負責聲明其加載電影的意圖,并使用 selector 通路電影清單資料。
Effects 是擷取電影的異步活動發生的地方。 您的元件變得更容易測試并且對它需要的資料負責。