更新(样品未测试)
刚刚在react-navigation@5.7+发现了一个新方法,
这个方法的好处应该是不需要覆盖HeaderBackButton、Android Back button、@987654327 @自己。
如果您的react-navigation 版本足够高,请随意尝试并告诉我结果:
import React, { useEffect } from 'react';
const ProductDetailsScreen = ({ navigation }) => {
useEffect(() => {
const unsubscribe = navigation.addListener('beforeRemove', (e) => {
/* Prevent default behavior of leaving the screen */
e.preventDefault();
/* Pop to the first screen of stack navigator - DashboardScreen */
navigation.popToTop();
});
return unsubscribe;
}, [navigation]);
return (<>{/* Your screen content here */}</>);
};
export default ProductDetailsScreen;
方法参考文档:
https://reactnavigation.org/docs/preventing-going-back/
原答案
由于你想要的是让用户在点击返回标题按钮时在ProductDetailsScreen中返回DashboardScreen,请尝试通过覆盖标题返回按钮的功能来实现,如下所示:
import React, { useEffect } from 'react';
import { BackHandler } from 'react-native';
import { HeaderBackButton } from '@react-navigation/stack';
const ProductDetailsScreen = ({ navigation }) => {
useEffect(() => {
navigation.setOptions({
headerLeft: () => (<HeaderBackButton onPress={backToDashboard} />)
});
/* Remember to override Android system back button */
const backHandler = BackHandler.addEventListener("hardwareBackPress", backToDashboard);
return () => backHandler.remove();
}, [navigation]);
/* As your first screen in stack navigator is DashboardScreen so just popToTop() */
const backToDashboard = () => { navigation.popToTop(); };
return (<>{/* Your screen content here */}</>);
};
export default ProductDetailsScreen;
注意:请记住覆盖 Android 后退按钮行为(如示例中所示)。
如果您的屏幕中有手势处理程序,请记住也要覆盖它
更多关于覆盖标题返回按钮的信息:
https://reactnavigation.org/docs/header-buttons/#overriding-the-back-button
https://reactnavigation.org/docs/stack-navigator/#headerleft