我使用create-react-native-app创建了一个简单的应用程序,并尝试在其中实现react-navigation。 应用程序的结构非常简单。开始时,应用程序将加载欢迎屏幕,用户可以决定注册或登录,如果已经记录,则用户将直接进入主主屏幕。 通过官方文档,我注意到不推荐使用Redux,如果没有反应导航的话,如何实现redux的几乎没有。
有没有人知道如何管理没有Redux的导航状态而不会生气?
根据官方文件:
withNavigation是一个更高阶的组件,它将导航道具传递给一个包装好的组件。当您无法直接将导航道具传递到组件中时,或者在深层嵌套的子项中不想传递它时,它很有用。
因此,使用此组件可以访问任何组件的道具。
检查AuthLoadingScreen中的用户令牌(在您的情况下为欢迎屏幕)。并根据用户令牌分散到SignUp
屏幕或Home
。
例如...
WelcomeScreen(AuthLoading)
包裹Auth(SignUp, SignIn)
,Home( and others screen)
和createStackNavigator
。App.js
import { createSwitchNavigator, createStackNavigator } from 'react-navigation';
// Implementation of HomeScreen, OtherScreen, SignInScreen, AuthLoadingScreen
// goes here.
const AppStack = createStackNavigator({ Home: HomeScreen, Other: OtherScreen });
const AuthStack = createStackNavigator({ SignIn: SignInScreen });
export default createSwitchNavigator(
{
AuthLoading: AuthLoadingScreen,
App: AppStack,
Auth: AuthStack,
},
{
initialRouteName: 'AuthLoading',
}
);
constructor
类的AuthLoadingScreen
中写入检查用户令牌。AuthLoadingScreen.js
import React from 'react';
import {
ActivityIndicator,
AsyncStorage,
StatusBar,
StyleSheet,
View,
} from 'react-native';
class AuthLoadingScreen extends React.Component {
constructor(props) {
super(props);
this._bootstrapAsync();
}
// Fetch the token from storage then navigate to our appropriate place
_bootstrapAsync = async () => {
const userToken = await AsyncStorage.getItem('userToken');
// This will switch to the App screen or Auth screen and this loading
// screen will be unmounted and thrown away.
this.props.navigation.navigate(userToken ? 'App' : 'Auth');
};
// Render any loading content that you like here
render() {
return (
<View style={styles.container}>
<ActivityIndicator />
<StatusBar barStyle="default" />
</View>
);
}
}
重要的是如何将导航中的屏幕包装成堆栈,抽屉和水龙头。
你可以控制堆栈的各种方式
this.props.navigation.navigate('yourscreen')
this.props.navigation.goBack()
特别是,当屏幕包含在堆栈中时,有更多的控制。
this.props.navigation.popToTop()
this.props.navigation.replace(yourscreen')
替换当前路线