2016-12-11 31 views
4

我一直在閱讀,我應該使用redux-thunk或者redux-saga來處理副作用。 爲什麼不能簡單地用行動創造者一樣,派遣多個動作:爲什麼使用redux-thunk或者redux-saga來獲取?

function loadProductActionCreator(dispatch) { 
    dispatch({ 
    type: 'load_product', 
    }) 
    fetch('api/product').then(
    function (r) { 
     return r.json(); 
    } 
) 
    .then(function (res) { 
    dispatch({ 
     type: 'loaded_product', 
     data: res 
    }) 
    }) 
} 

我想,和它的工作(complete code)。所以我想一定有一些我不知道的麻煩。

+0

你可以這麼做。當你用手動創建每個動作創建者的包裝(就像你在45-47行上做的那樣)時,你放棄了並且採取了一些重要的步驟。 – zerkms

+0

所以這是唯一的好處?避免爲這類任務創建幾個動作? – sylvain

+0

如果你檢查redux-thunk代碼,你會發現它導出的函數只有4(4)行代碼https://github.com/gaearon/redux-thunk/blob/master/src/index.js – zerkms

回答

3

你的代碼是類似於咚呢。

按照redux文檔,操作應該是純粹的。並且他們應該始終爲相同的輸入參數返回相同的值。通過使用fetch,您允許操作返回非具體值,而非來自服務器的值,並且平均操作響應可能隨時間而變化。

這就是所謂的副作用。這是默認情況下不應該進行重複動作的事情。

但是爲什麼?

是的,你可以在你的動作中鍵入它,在小應用程序中它並不重要。

在較大的應用有使用redux-saga的好處:

  • 行爲是可以預見的,他們只是返回的有效載荷像

    { 
        type: 'FETCH_POSTS', 
        params: { 
        category: 'programming' 
        } 
    } 
    
  • ,然後你建立中間件將採取所有數據的操作需要執行真實API的請求

可能的優點:

  • 清潔的代碼庫(但可能是開銷較小的應用程序)
  • 分離與所有需要的信息「虛擬」的行動來執行請求和實際的API中間件
  • 請求參數可見直接在終極版開發工具
  • 可以容易地debouncethrottle取這可能與真正棘手終極版 - 咚
  • 可能easil Y組合起來的動作(等待另一個事件/讀取,一連串的事件)
  • 可以停止正在運行的任務

從個人的經驗,對我們已經開始與redux-thunk一個項目(較大的代碼庫),但後來我們需要集成更多高級功能,例如油門,以及一些動作之間的依賴關係。所以我們將所有內容重寫爲redux-saga,它對我們來說效果很好。

1

你是在這裏複製redux-thunk。純粹的redux動作創建者應該返回一個要分派的動作對象,而不是派發一個動作本身(參見redux doc on action creator)。

爲了更好地理解爲什麼你的技術方法終極版,thunk的複製,看this post從它的作者

相關問題