如何通过React Native中的组件共享登录状态
How to share login state through components in React Native?
在vue.js中,我使用$vm.$root.user
存储用户数据并共享用户登录状态。在React.js中,有方便共享数据的上下文。
但我在React Native中没有找到任何关于它的文档,在React Nature中这样做的正确方法是什么?
我使用回流用于此目的(https://github.com/reflux/refluxjs)React&React Native。
它的工作方式是设置一个存储,其中包含您的登录状态、用户数据等。每当这些值发生变化时(通过ajax调用、用户操作等),您都可以从存储中激发一个以对象为参数的事件。(方法名称为"trigger")。
import Reflux from 'reflux'
import LoginActions from '../actions/LoginActions'
var LoginStore = Reflux.createStore({
isLoggedIn: false,
profile: {},
init: function() {
// Do some initialization, e.g. checking if you've set some login information or tokens in local storage
},
listenables: [LoginActions],
loginUser: function(e) {
// Do some call to a server to try and authenticate
// fetch(...)
if (fetch_result = true) {
this.isLoggedIn = true;
this.trigger({type: "LOGIN_STATUS", loggedIn: true});
}
},
logoutUser: function(e) {
// ...
}
上面提到的登录操作是一个非常简单的模块,例如:
import Reflux from 'reflux'
export default LoginActions = Reflux.createActions([
'loginUser',
'logoutUser',
]);
您的主应用程序应该通过添加侦听器来侦听存储事件,并且基于对象(您自己定义的),您可以更新状态或执行一些逻辑;例如
componentDidMount() {
this.login = LoginStore.listen(this.loginStoreListener.bind(this));
}
componenWillUnmount() {
// Remove the listener on unmounting
this.login();
}
loginStoreListener(obj) {
switch (obj.type) {
case "LOGIN_STATUS":
this.setState({loggedIn: obj.loggedIn})
break;
case "PROFILE":
this.setState({profile: obj.profile})
break;
}
}
在主应用程序中,根据loggedIn状态,您可以决定显示哪些视图,例如与Navigator结合显示。
相关文章:
- Angular 2,在没有直接关系的两个组件之间共享一个对象
- 如何通过React Native中的组件共享登录状态
- Asp NET在不同的解决方案中共享了html组件
- Aurelia组件在其他视图模型中使用时不共享实例
- React组件之间共享属性
- 在页面之间共享组件,而无需重新加载
- 在Angular 2中与多个组件共享websocket数据
- 如果我两次使用相同的反应/冗余组件,它们会共享状态吗?
- Reactjs:如何在组件之间共享 websocket
- 如何在 Vue.js 中的组件之间共享方法
- 更新React组件共享状态
- 如何在页面html区域APEX(Oracle Application Express)上使用共享组件静态文件或CSS文件
- 在子组件之间共享父组件状态'州
- 在私有项目之间共享前端组件
- Ember包括应用内共享组件插件在应用内引擎
- 如何跨应用程序共享Windows 8 WinRT Metro风格库/组件
- 在两个项目之间共享组件,同时保留热加载
- 如何创建共享功能但具有独立状态的react组件
- Angular2 -共享组件控制器
- Ember.js-如何在更多路线之间共享路线模型数据?-为什么不在组件中加载数据