2015-12-07 34 views
3

在找到egghead.io的迷你講座系列後,我已經與REDX合作了一下。我試圖理解REDX和this.state之間的區別以及何時適合使用哪一個。REDX vs this.state原生

在還原之前,我設置了一個全局容器組件,它承載了整個應用程序的狀態。例如,當它從websocket接收到數據更改時,它將在適當的狀態項上調用this.setState,觸發對其子組件觸發UI更改(例如將新的TODO添加到TODO列表中)。我發現REDX是一個很好的替代品。但是,當涉及到維持一種不同的狀態 - 比如用戶所在的狀態時 - 我發現使用redux非常困難,因爲我必須從本質上維護我自己的屏幕歷史,而不受Navigator 。當嵌套的導航器也變得困難,並且不清楚應該將用戶帶回哪個狀態。

我想知道什麼是一些很好的經驗法則或情況,在哪裏適合使用this.state vs redux vs不手動保持狀態(就像使用Navigator一樣)。

+0

我想[這個SO帖子](https://stackoverflow.com/q/46639403/3694459)給出了一些關於redux狀態與反應狀態的更多信息。 – Balasubramanian

回答

9

一般來說,Redux位於您的「智能組件」的上方,僅爲它們處理的全局應用程序狀態提供位。我會說,通常情況下,人們總是將狀態存儲在他們的Redux存儲中,除非使用的狀態字面上是組件的功能內部,並且在其他地方永遠不會使用。

這樣做的一個示例可能是存儲textInput字段的值,其中值本身不是其他組件的部分,可能是與其他值一起編譯的,或者您只想讓其他組件可用它符合一些長度要求或什麼。在這種情況下,我最好將它存儲在我的組件狀態,然後最終將其存儲在redux存儲中。

狀態存儲「實施細則」我個人遵循:

  1. 只要一個值是任何感興趣的應用程序的任何其他部分,可能是價值後,或將被傳遞到其他組件(聰明或愚蠢),它必須進入終極版
  2. 如果值是字面上廢話到應用程序的其餘部分,它MAY通過該組件的狀態下內部管理的組成部分,直到它受上述限制。

關於你的導航儀的具體問題,不知道什麼是「回」是,爲什麼沒有實現,而不是你的route狀態作爲數組呢?您可以進一步編寫包含navigatormapStateToProps函數的組件,以僅查看routes中的最後一項。

mapStateToProp(state) { 
    return { currentRoute: state.route && state.route[state.route.length-1] } 
} 
+0

感謝您的回答!在處理redux的經驗中,「當前屏幕」狀態還是導航歷史記錄狀態是您保存在redux中的某個狀態? – fanghai44

+0

你完全可以將「當前屏幕」保留在整個路由堆棧的旁邊。它們不必相互排斥。看看[這個例子](https:// github。com/Qwikly/react-native-router-redux/blob/master/src/reducer.js) –

+0

當做動畫時,不會有一個更好的保持組件狀態的例子嗎?根據實施方式的不同,一個組件可能會每秒更新60次或更多狀態。 – Sawtaytoes