我有这个 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/