javascript - 使变量可在函数外部访问

标签 javascript android reactjs function react-native

我有这个 React Native 代码,我想在这个之外使用 gameOfTheUser 变量(在箭头函数中创建:userRef.ounce ('value').then (snapshot =>)一,为了能够继续不同的条件。怎么做?我想(我希望!)这个问题有一个简单的解决方案。

我的 RouterScreen.js :

    import React from 'react';
    import { Text } from 'react-native';
    import fb from '../engine/firebaseConfig';

    export default class RouterScreen extends React.Component {
      componentDidMount() {
        const { navigate } = this.props.navigation;
        fb.auth().onAuthStateChanged(user => {
          if (user) {
            var userRef = fb.database().ref('users/' + user.uid);
            userRef.once('value').then(snapshot => {
              var gameOfTheUser = snapshot.child('game').val();
              console.log('0 : ' + gameOfTheUser);
            });
            if (gameOfTheUser !== null) {
              console.log('InGame');
              var gameID = gameOfTheUser;
              console.log('1 : ' + gameOfTheUser);
              console.log('1 : ' + gameID);
              navigate('Game', { user, gameID });
            } else {
              console.log('NotInGame');
              navigate('Choose', { user });
            }
          } else {
            navigate('Auth');
          }
        });
      }

      render() {
        return <Text>Hello</Text>;
      }
    }

我的 App.js :

import React from 'react';
import { StackNavigator } from 'react-navigation';

// Pages
import RouterScreen from './screens/RouterScreen';
import AuthScreen from './screens/AuthScreen';
import ChooseScreen from './screens/ChooseScreen';
import GameScreen from './screens/GameScreen';

export const RootStack = StackNavigator(
  {
    Router: {
      screen: RouterScreen,
    },
    Auth: {
      screen: AuthScreen,
    },
    Choose: {
      screen: ChooseScreen,
    },
    Game: {
      screen: GameScreen,
    },
  },
  {
    initialRouteName: 'Router',
    headerMode: 'none',
  }
);

export default class App extends React.Component {
  render() {
    return <RootStack />;
  }
}

最佳答案

我想我可以在以下位置描述您的目的:

  • 登录用户
  • 如果在游戏中 -> 导航到游戏
  • Else -> 导航到 Auth。

有很多方法可以做到这一点,但在你的问题中“简单”,我认为 React Native Async Storage 是一个很好的解决方案。

AsyncStorage is a simple, unencrypted, asynchronous, persistent, key-value storage system that is global to the app. It should be used instead of LocalStorage.

请参阅有关异步存储的 React Native 文档 here .

有一些演示代码:

从存储中获取数据:

var gameOfTheUser = AsyncStorage.getItem('gameOfTheUser');

将数据保存到异步存储:

await AsyncStorage.setItem('gameOfTheUser', 'the_witcher_3');

Note: Async storage can only save data with type of String. So with complex data like array or Object you must JSON.stringify it first

关于javascript - 使变量可在函数外部访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49160568/

相关文章:

android - 如何调试proguard

javascript - 检查两个 URL 是否是同一个页面

javascript - 检查拖放内容是否为图像

java - 更改 actionBar 下拉菜单背景颜色

javascript - 为什么 Spread 语法在 nodejs 中抛出错误

javascript - 尝试使用 Context API 时看到 "render is not a function"

javascript - 在状态值之间切换 - 切换功能

javascript - 范围变量 ng-bind-html 未及时加载

javascript - javascript中如何通过数组实现自动滑动图片

android - 在 Android 上单击后退按钮期间调用的函数