我最近在我的項目中使用了迴流,這裏有一個問題令我困惑不已。
作爲迴應模式,我在我的React組件中調用動作,並在迴應存儲中獲取正在傾聽動作的遠程數據。我的組件聽取商店中數據的變化。例如獲取項目列表。到目前爲止,沒關係。
但有時,我想要一個通知,告訴我該操作已成功執行。
例如,我有一個UserStore,一個UserActions和一個監聽UserStore的LoginComponent。當用戶輸入用戶名和密碼並單擊提交按鈕時,LoginComponent調用UserActions.login(),並且我在UserStore中發送登錄請求。登錄成功後,UserStore從響應中獲取用戶信息。
在這個時候,我想給LoginComponent一個提示,比如'Login Success'。我有兩種方法可以做到,但我認爲兩者都不夠好。執行迴流動作後觸發通知/回調
- 在UserStore的數據中給出一個標誌,然後觸發更改。當UserStore觸發數據更改事件時,LoginComponent獲取此標誌,然後提示。因爲UserStore不僅會在登錄成功時觸發數據更改,還會在其他一些情況下(如從Cookie或sessionStorage獲取用戶信息)觸發數據更改,所以LoginComponent必須爲此登錄成功標誌添加一個if-else,如果它是登錄成功,然後提示。
我不認爲這是一個很好的模式,因爲該標誌只是爲了提示而不是像用戶的信息那樣的真實數據。如果我也想在用戶更改密碼後提示,我將需要另一個標誌字段。 - 將承諾(或回調函數)傳遞給UserAction調用,並在登錄成功後解析此承諾,然後LoginComponent可以提示promise.then。這似乎比第一個好,但是這不是一個反模式,因爲通過行動傳遞給商店的承諾可能會打破迴流的單向?
我想問的是:什麼是常見的/適當的方式來解決這個問題?
我不是來自英文的地區,也不擅長英文表達。這是我在stackoverflow.com的第一個問題。我不清楚我是否清楚地描述了我的問題。所以,如果你對這個問題有一些建議,請告訴我,我會改進它來幫助那些關心這個問題的人。非常感謝!
我認爲有兩個與你的態度沒有問題。它不會打破流動的單向概念,因爲當視圖改變時它會觸發商店收聽的動作。商店使它變化,然後用觸發器更新視圖。我和你有同樣的困境,儘管不是異步調用。你可以閱讀我的博客文章http://www.dimagimburg.com/reflux-sweeper-react-reflux-and-immutablejs-explained-by-example/ –
@DimaGimburg謝謝!也許我太擔心這件事。 –