我最近將ngrx商店添加到我現有的angular2應用程序中,以簡化代碼並保持共享狀態。 但是我對一個部分感到困惑,我一開始就在服務器上更新狀態,而在病房後我只是在沒有檢查服務器的情況下工作。那麼當後端發生某些變化時會發生什麼?每當我去那個網頁或有更好的方法時,我是否會檢查它? 基本上,我想知道確保您的狀態數據更新以顯示服務器數據的最佳做法是什麼?我的ngrx商店如何檢測服務器端的更改?
回答
建議使用NGRX Effects。當您將NGRX Effects與Store一起實施時,任何HTTP副作用都將由Effects處理,而後者將使用Store中的Action來更新數據。一個Effect監聽Action並使用Action的有效載荷執行副作用(HTTP)。當效果完成後,它會使用新的有效內容調用新的Action(成功的Action或失敗的Action),從而更新Store中的數據。
在example in the Effects docs它顯示Login
的效果:
@Injectable()
export class AuthEffects {
constructor(
private http: Http,
private actions$: Actions
) { }
@Effect() login$ = this.actions$
// Listen for the 'LOGIN' action
.ofType('LOGIN')
// Map the payload into JSON to use as the request body
.map(action => JSON.stringify(action.payload))
.switchMap(payload => this.http.post('/auth', payload)
// If successful, dispatch success action with result
.map(res => ({ type: 'LOGIN_SUCCESS', payload: res.json() }))
// If request fails, dispatch failed action
.catch(() => Observable.of({ type: 'LOGIN_FAILED' }))
);
}
在這個例子中,對於登錄的效果偵聽LOGIN
行動。當LOGIN
操作發生時,它使用操作的有效內容並執行HTTP POST。當HTTP POST返回時,它會調用動作LOGIN_SUCCESS
以及有效負載的json響應,或者返回LOGIN_FAILED
操作。
這樣,您的商店始終保持在任何副作用循環中,如HTTP。如果一個組件更新數據庫中的記錄,則該效應應通知該存儲,以便訂閱該數據的所有組件都可以獲取更新的數據。
希望有所幫助。
感謝您的詳細解答Tyler。我部分理解你的意思。我還沒有打開NGRX效果。但我現在會這樣做,這可能會解決我的顧慮。非常感謝 –
這裏有很多例子使得效果比需要的更復雜。基本上,您現有的HTTP調用可以修改爲通過偵聽某些操作,然後使用新的有效內容返回新的操作來充當效果。效果監聽的動作(例如上面示例中的「LOGIN」)可能只需要立即將未修改的有效內容返回到組件,直到該效果使用新的有效內容調用新的動作。 –
效果的很好解釋,但可能無法回答這個問題?我對Q的理解:服務器上的某些變化(例如,用戶B完成了我列表中的Todo)。服務器如何發回信號(服務器事件,網絡套接字,Mq ...)以及哪些代碼會觸發商店的操作? – stwissel
- 1. 檢測硬件更改服務器端
- 2. 使用NGRX /存儲更新商店
- 3. Angular 2 Ngrx商店:更新數組
- 4. 如何檢測服務何時更改?
- 5. 將商店更新寫回服務器
- 6. 在將Ngrx商店服務實施到我的組件中的問題
- 7. 如何更改商店ID?
- 8. 如何從ngrx商店中獲取值到我的模板中?
- 9. 檢測Silverlight服務器端
- 10. 商店訂閱未與NGRX店4
- 11. 狀態更改時不調用ngrx商店訂閱
- 12. 如何更改商店中的商店排序
- 13. npm如何更改服務器端口
- 14. 應用版本更新檢查與Play商店沒有使用任何後端服務器/網絡服務?
- 15. 寶石服務器的商店憑證
- 16. 檢測服務器端啓用的Javascript
- 17. 檢測服務器端的TimeoutException WCF
- 18. htaccess的服務器端WEBP檢測
- 19. 如何直接從服務器端過濾的商店獲取值
- 20. 更改服務器端的url
- 21. 更改Apache Web服務器的端口
- 22. $ locationProvider.html5Mode的服務器端更改(true);
- 23. 更改TeamCity web服務器的端口
- 24. @ngrx 4商店返回類型
- 25. ngrx商店4選擇不工作
- 26. @ Ngrx /商店與建設者模式
- 27. 異步管道和ngrx商店
- 28. @ngrx - 將商店查詢鏈接到BehaviorSubject
- 29. Angular - Karma - ngrx - 沒有店鋪提供商
- 30. NgRx無法從商店中選擇
您是否在談論服務器通知,如[Server Sent Events](https://en.wikipedia.org/wiki/Server-sent_events) –