设置用户配置文件后导航到主屏幕
Navigating to the homeScreen after setting up the user's profile
我已经弄清楚如何使用 React-navigation 和 firebase-authentication 从 signupScreen 导航到 homeScreen,但我添加了一个额外的屏幕。这是配置文件设置屏幕。我的问题是,在从用户那里获取数据后,我无法从设置屏幕导航到主屏幕。完成按钮应该是 'addData',然后导航到主屏幕,但我无法弄明白。
请询问您是否需要更多信息。这是我的代码的一部分。我应该添加什么?
//...
//This adds the users data onto firebase
const addData = () => {
try {
const docRef = addDoc(collection(db, "users"), {
nickname,
bio,
selectedImage,
dbEmail,
});
console.log("Document written with ID:", docRef.id);
} catch (e) {
console.error("Error adding document: ", e);
}
};
//Overall UI
return (
//Once 'Finish' is pressed, it saves the data onto FireStore and should navigate to homeScreen
<View style={styles.all}>
<Text style={styles.title}>Profile Setup</Text>
<View style={styles.selectionView}>
<TouchableOpacity style={styles.completebtn} onPress={onSignOut}>
<Text style={styles.backtxt}>Back</Text>
</TouchableOpacity>
<TouchableOpacity style={styles.completebtn} onPress={addData}>
<Text style={styles.completetxt}>Finish</Text>
</TouchableOpacity>
</View>
//...
这取决于ProfileSetupScreen
是否是导航器中定义的Screen
。如果是,那么导航框架会将 navigation
属性传递给 ProfileSetupScreen
,您可以通过 screen props
.
按如下方式使用它
const ProfileSetupScreen = ({navigation}) => {
const addData = () => {
try {
const docRef = addDoc(collection(db, "users"), {
nickname,
bio,
selectedImage,
dbEmail,
});
console.log("Document written with ID:", docRef.id);
navigation.navigate(”HomeScreen”)
} catch (e) {
console.error("Error adding document: ", e);
}
};
return (…)
}
注意,navigation.navigate(”HomeScreen“)
采用我们要导航到的屏幕的名称,并且在导航器中定义了该名称,因此如果您的主屏幕在那里定义了不同的名称,那么您需要使用那个名字。
如果您的 ProfileSetupScreen
不是导航器中的屏幕,则导航道具将不会传递到屏幕。
在这种情况下,您有两种选择。要么将导航道具从导航器中定义的屏幕的父屏幕向下传递到组件,要么使用 useNavigation
挂钩,如下所示。
const ProfileSetupScreen = (props) => {
const navigation = useNavigation()
…
}
我已经弄清楚如何使用 React-navigation 和 firebase-authentication 从 signupScreen 导航到 homeScreen,但我添加了一个额外的屏幕。这是配置文件设置屏幕。我的问题是,在从用户那里获取数据后,我无法从设置屏幕导航到主屏幕。完成按钮应该是 'addData',然后导航到主屏幕,但我无法弄明白。
请询问您是否需要更多信息。这是我的代码的一部分。我应该添加什么?
//...
//This adds the users data onto firebase
const addData = () => {
try {
const docRef = addDoc(collection(db, "users"), {
nickname,
bio,
selectedImage,
dbEmail,
});
console.log("Document written with ID:", docRef.id);
} catch (e) {
console.error("Error adding document: ", e);
}
};
//Overall UI
return (
//Once 'Finish' is pressed, it saves the data onto FireStore and should navigate to homeScreen
<View style={styles.all}>
<Text style={styles.title}>Profile Setup</Text>
<View style={styles.selectionView}>
<TouchableOpacity style={styles.completebtn} onPress={onSignOut}>
<Text style={styles.backtxt}>Back</Text>
</TouchableOpacity>
<TouchableOpacity style={styles.completebtn} onPress={addData}>
<Text style={styles.completetxt}>Finish</Text>
</TouchableOpacity>
</View>
//...
这取决于ProfileSetupScreen
是否是导航器中定义的Screen
。如果是,那么导航框架会将 navigation
属性传递给 ProfileSetupScreen
,您可以通过 screen props
.
const ProfileSetupScreen = ({navigation}) => {
const addData = () => {
try {
const docRef = addDoc(collection(db, "users"), {
nickname,
bio,
selectedImage,
dbEmail,
});
console.log("Document written with ID:", docRef.id);
navigation.navigate(”HomeScreen”)
} catch (e) {
console.error("Error adding document: ", e);
}
};
return (…)
}
注意,navigation.navigate(”HomeScreen“)
采用我们要导航到的屏幕的名称,并且在导航器中定义了该名称,因此如果您的主屏幕在那里定义了不同的名称,那么您需要使用那个名字。
如果您的 ProfileSetupScreen
不是导航器中的屏幕,则导航道具将不会传递到屏幕。
在这种情况下,您有两种选择。要么将导航道具从导航器中定义的屏幕的父屏幕向下传递到组件,要么使用 useNavigation
挂钩,如下所示。
const ProfileSetupScreen = (props) => {
const navigation = useNavigation()
…
}