javascript - React Native 如何通过组件共享登录状态?

标签 javascript reactjs react-native

在 vue.js 中,我使用 $vm.$root.user 来存储用户数据和共享用户登录状态。在 React.js 中有上下文可以方便地共享数据。

但我没有在 React Native 中找到任何关于它的文档,在 React Native 中执行此操作的正确方法是什么?

最佳答案

我在 React 和 React Native 中都为此目的使用 Reflux (https://github.com/reflux/refluxjs)。

它的工作方式是您设置一个商店,其中包含您的登录状态、用户数据等。每当这些值发生变化时(通过 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) {
 // ...
}

上面引用的LoginActions是一个非常简单的模块,例如:

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;
    }
}

在您的主应用程序中,您可以根据登录状态决定显示哪些 View ,例如与 Navigator 结合使用。

关于javascript - React Native 如何通过组件共享登录状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36455508/

相关文章:

javascript - 从 WinJS.Binding.List 中删除项目

javascript - 如何在获取数据之前停止组件渲染?

html - 使用 React 组件状态更改 currentTime

android - 如何使用 xCode 继续开发 React Native 项目?

javascript - React map 内 JSX 元素的展开操作

php - PHP 的 URL 参数

javascript - React/Redux - 你应该什么时候从 API 获取新数据来更新你的商店?

REST api 的 Spring security 在身份验证失败时显示浏览器弹出窗口

react-native - 如何更改设备位置?

javascript - 需要一个正则表达式来检查字符串中的 "2 alphabets and 4 numeric"