2016-11-30 28 views
0

它已經問過,但我的情況是不同的:React Redux:在哪裏做沉重的舉重? Reducer或ActionCreator?

我拉過一個服務器映像,這是我正在做的一個動作的創造者:

export function getResults(settings,page){ 
    return function(dispatch){ 
     dispatch(startGettingResults()); 

     return Axios.get('http://localhost:8080/getimages/',{params:{settings: settings,page:page}}).then(function(response){ 
      return dispatch(resultsSuccess(response.data.results, page)); 
     }).catch(function(){ 
      return dispatch(resultsFailure()); 
     }); 
    } 
} 

這很簡單&簡單:我在動作創建器中進行API調用,並通過減速器將所有內容存儲在狀態中。

但是,當用戶點擊我網站上的某個元素時,我想讓商店中的所有當前圖像都改變顏色。我將在客戶端應用程序而不是服務器上進行顏色更改。

我的問題是現在,我最好在哪裏做這個沉重的舉重?

  • 在減速器中,哪些能夠輕鬆訪問當前狀態下的圖像?
  • 在actioncreator?這裏的問題是,我必須傳遞商店中的所有圖像,這意味着我必須將它們作爲我的組件上的道具加載。

我對處理這個問題的最佳方法有點遺憾。你在哪裏放置繁重的數據處理功能?

+1

這是有道理的,因爲它可以進入商店 –

回答

1

爲什麼不創建一個新的動作,例如'COLOUR_ALL_IMAGES'併發送它?減速器會理解狀態並且知道所有te圖像,不需要將它們作爲動作的一部分傳遞給它們?

+0

減速機內進行然後做減速機的繁重工作嗎? – PoeHaH

+0

我想是這樣,取決於你的意思是繁重。如果要通過造型實現顏色變化,那麼沒有太多「繁重工作」要做,減速器正在採取行動並改變狀態。如果存在實際的副作用,那麼減速器不是做這件事的地方,因爲它意味着一個純函數(用函數術語),因此沒有副作用(只應該在狀態下運行)。 –

+0

這很繁重:我通過javascript對圖像進行灰度化,然後通過javascript着色。這就是我也在想的:這不是在減速器中這樣做的地方,但我不確定我最好在哪裏做。行動似乎是最好的地方,但似乎很愚蠢的是,必須將所有商店的圖像傳遞給一個行動,以使其完成工作。猜猜沒有其他辦法.. – PoeHaH

相關問題