2017-01-19 12 views
2

我一直在使用React/Redux大約兩年,但我目前參與了一個React應用程序,該應用程序使用Facebook的Flux而不是Redux進行狀態管理。所以我開始閱讀Flux和Redux的不同之處。我偶然發現了一些我不完全明白的東西,也許這裏有人能夠「討論」這個問題!在使用React的Flux體系結構中執行異步調用時的最佳做法是什麼?

在Facebook關於reduceStore的reduce方法的Flux文檔中,他們聲明「這個方法應該是純的,沒有副作用」(這聽起來很像Redux中的reducer方法 - 純函數)。但在他們自己的例子中:Flux async(https://github.com/facebook/flux/tree/master/examples/flux-async),他們引入了處理API調用的DataManager。這個經理在他們的範例中從reduce方法中被調用。 Ergo,在他們自己的例子中的reduce方法導致了副作用,使其成爲非純函數。

這裏的最佳做法是什麼?你自己用什麼?這些雜質應該放在哪裏?

我的「Redux」啓發式方法是創建一個動作創建器(如Redux中),該動作創建器從視圖中調用,並且此方法執行異步API調用,然後分派動作。因此,爲了澄清我的方法,將取消存儲中的提取邏輯(副作用),並轉而採用某種動作創建方法。

在須藤代碼行動的創建者會是這個樣子:

getSomedata(param){ 
    dispatch({type: GET_SOME_DATA_FETHCING}) 
    doApiCallAsync() 
    .then(() =>{dispatch({type: GET_SOME_DATA_SUCCESS, result: json.result})}) 
    .catch(() =>{dispatch({type: GET_SOME_DATA_FAILURE})}) 
} 

回答

0

與終極版,流量不限制你如何處理異步操作的。最佳做法可能不存在;這取決於開發者的口味。這是在磁通矢量官方異步例如:https://github.com/facebook/flux/tree/d95f9b9a06a24ccc8ba6b5742759ea3a383f20c9/examples/flux-async

正如你可以看到,它調用通過TodoDataManager這些API正好在店裏,像this linethis line;它不使用動作創作者。在TodoDataManager中,它也發送操作。就個人而言,我不太喜歡這種方法,或者...讓我們說我不喜歡Flux。

實際上,我正在將Flux應用程序遷移到Redux。舊的Flux應用程序使用類似的方法,它使用事件發射器來通知組件有關商店更改。代碼庫是一團糟。

如果我必須使用助焊劑,我會採用與您的方法相同的方法,將責任清晰分開,並使代碼庫更易於推理。但是如果遷移到Redux是一種選擇,我會選擇Redux。

+0

如果可能的話,我會遷移到Redux - 但目前還不是。 我在Facebook自己的文檔中發現特別奇怪的事實是,他們聲明reduce函數應該是純粹的,但在他們自己的例子中,他們並沒有保持純粹 - 那些不在Facebook工作的凡人然後應該做出選擇,當他們甚至不能按照自己的說法。 無論如何謝謝你的答案! –

相關問題