簡體   English   中英

Redux和React RxJS中的副作用

[英]Side Effects in Redux & React RxJS

你應該在哪里放置API-calls終極版

我認為它們屬於Actions,因為它們是data一部分,並且沒有副作用。

聽起來對嗎?

我想避免使用RxJS或ReduxSaga。

我在動作文件中進行API調用,但有一個單獨的函數可自行創建動作。 無論如何我都同意您的觀點,即API調用與動作創建者一起(在我們的集體看來)是最好的。

創建方案

  1. 如果僅在單個組件中調用同步API,則可以在操作中進行API調用,取回數據,然后進行分派。 很簡單。
  2. 如果您在多個組件中調用同步API,您將分別處理它們嗎?
  3. 如果調用異步API,您將在請求開始時調度標志,並在請求完成時再次調度標志嗎?

對於2,3點, Thunk中間件是最好的選擇,因為它比Saga容易得多。

這是redux世界中的redux蠕蟲,並且有很多方法。 主要思想是執行可以訪問商店的dispatch方法的功能,以便這些功能可以協調自己對商店的操作順序。 但是,每種方法都以不同的方式來修飾函數執行和副作用的固有狀態(例如,等待API調用完成,然后再將“完成”操作分派給商店):

  • 必要的解決方案是thunk ,它們只是普通的舊函數。 當商店收到一個thunk時,它不會像常規對象操作那樣通過減速器運行thunk,而是在傳遞商店的dispatch功能的同時執行thunk,以便thunk可以編排自己的動作序列。 有關示例,請參見redux-thunk

  • redux-saga是一種聲明式解決方案,您可以在其中調度描述如何執行副作用的操作對象。 例如,如果副作用是從API提取,則該操作包含提取函數和要傳遞給提取函數的參數。 例如,如果fetch調用是fetchFromServer(a, b, c)則您分派的操作將包含fetchFromServerabc 副作用的有狀態部分保留在稱為“ sagas”的生成器函數中。

  • redux-observable是另一個聲明性解決方案,但它不是使用生成器來實現“狀態”,而是使用了observable。 可觀察變量可能有點不直觀,因此我在這里不做過多介紹,但這是我使用的解決方案。 老實說,后兩者在某種程度上是同一枚硬幣的兩個側面,但我發現可觀察到的更為抽象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM