簡體   English   中英

將基於promise的React應用程序轉換為redux-saga:如何設置React組件變量?

[英]Converting promise-based React app to redux-saga: how do I set React component variables?

我是redux-saga的初學者,作為一個任務,我認為我想嘗試將現有的大型React應用程序從Promises轉換為redux-saga。 我正在取得一些進展,但是我遇到的一個問題是,當我使用Promises時,我能夠根據諾言是否實現來設置組件局部變量。 現在看來,我只是將請求“移交給” redux-saga,卻不知道(在呼叫站點中)請求是否已實現,現在,我(在組件內部)不知道請求是否成功。

例如,假設我們有一個基於承諾的通話,該通話可獲取用戶的游戲

getCurrentGamesForUser = (nickname, token) => {
    return logic.getGamesForUser(nickname, token)
      .then(currentGames => {
        this.needToUpdateGamesFlagFromSocketIO = false
        this.setState({currentGames})
        sessionStorage.setItem('currentGames', JSON.stringify(currentGames))
      })
      .catch(({message}) => this.onError(message))
  }

如果我的諾言成功,那么我在這里設置標志this.needToUpdateGamesFlagFromSocketIO以及sessionStorage變量。

現在,據我了解,我將其轉換為

 getCurrentGamesForUser = (nickname, token) => {
    this.props.dispatch(getCurrentGames(nickname,token))
  }

而且效果很好。 如果有錯誤,它將被從傳奇中發送到商店,而我的組件將反映出來。

但是我該如何處理本地標志和會話存儲? 我還需要將這些添加到商店嗎? 除非我為每個組件都有一個單獨的存儲,為每個組件有一個本地存儲,否則這似乎很麻煩。 我在這里看到了類似主題的一些討論, https://github.com/redux-saga/redux-saga/issues/907 ,但似乎沒有答案。 我確定我錯過了處理所有這些問題的“冗余方式”,因此歡迎您提供任何指導。

Redux-Saga旨在將組件外部的所有基於動作的觸發器卸載到單獨的Saga范圍。 因此,不幸的是,沒有實現您所請求內容的簡單方法。 盡管您提到的問題跟蹤器中有一些建議的解決方法。

redux-saga的主要目的是通過將副作用卸載到單獨的執行上下文中來簡化對副作用的管理。 權衡之一是通信只能通過component -> action -> saga -> store -> component 因此,對於上述要求,我相信使用redux-saga將適得其反。

也就是說,您始終可以將redux-saga與其他基於promise / callback的方法(例如redux-thunk

諸如此類的用例將更適合基於回調的實現,而redux-saga可以很好地處理副作用,從而完全隔離了redux-saga

暫無
暫無

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

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