2017-05-28 66 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