2017-05-28 179 views
0

我正在開發React Native應用程序。React Native中的全局狀態

我想保存登錄人員的用戶標識,然後檢查用戶是否在每個組件中登錄。

所以我在找什麼就像cookies,會話或全局狀態。

我已經讀過,我應該使用Redux,但這似乎過於複雜,並且很難使其與react-navigation一起使用。它迫使我爲幾乎所有事物定義動作和縮減器,但我唯一想要的是能夠訪問所有組件中的單個全局狀態/變量。

有沒有其他的選擇,或者我真的應該重新構建我的整個應用程序使用Redux?

+0

我不認爲擁有多個商店是一種罪行,其中一個商店是包含一個值(或對象或數組或其他)的東西,並且當存儲的數據被修改時向其所有訂閱的偵聽器提供更改通知。 – EpicPandaForce

+0

在反應組件中還有其他替代方法,例如上下文變量,但我認爲從長遠來看,您可能會發現更多結構更易於管理(和測試)。它起初看起來令人生畏,但你很快就會意識到它沒有太多的東西。 – sooper

回答

0

在狀態管理方面有一些alternatives to Redux。我會建議你看看連身褲和Mobx。但是不要指望它們比Redux更容易。國家管理主要是一件神奇的事情,大部分的發明都發生在幕後。

但無論如何,如果你覺得你需要一些全球性的國家管理,無論是Redux還是Mobx等,都值得花時間掌握其中的一種解決方案。我不會推薦使用AsyncStorage或其他任何方法來達到此目的。

+0

像「AsyncStorage」這樣的組件是爲了持久化,我認爲OP關心的是管理通常應該在內存中的應用的狀態。 – sooper

+0

@sooper,這就是爲什麼我不推薦'''AsyncStorage'''。 – milkersarac

0

我通常做全局是這樣的:

我創造一個globals.js

module.exports = { 
    USERNAME: '', 
}; 

類似的東西,以存儲用戶名,那麼你只需要輸入:

GLOBAL = require('./globals'); 

而且如果你想存儲數據,可以說你想保存用戶名只是做:

var username = 'test'; 
GLOBAL.USERNAME = username; 

現在你去了,你只需要在你想要的頁面上導入GLOBAL並使用它,只需使用if (GLOBAL.username == 'teste')即可。

+0

這種方式工作不正常,不會觸發像this.state – Ansyori