Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
React native 在特定屏幕中禁用后退按钮(反应导航堆栈)_React Native_React Navigation_React Navigation V5 - Fatal编程技术网

React native 在特定屏幕中禁用后退按钮(反应导航堆栈)

React native 在特定屏幕中禁用后退按钮(反应导航堆栈),react-native,react-navigation,react-navigation-v5,React Native,React Navigation,React Navigation V5,你好 我需要禁用导航栏上的“后退”按钮。帮帮我 路线 霍姆:我不想离开申请表 成功:我不想再去结帐了 从“React”导入React; 从'@react navigation/stack'导入{createStackNavigator}; 从“../contexts/order”导入{OrderProvider}; 从“../pages/Home”导入主页; 从“../pages/Checkout”导入签出; 从“../pages/Checkout/Success”导入成功; const

你好 我需要禁用导航栏上的“后退”按钮。帮帮我

路线

  • 霍姆:我不想离开申请表
  • 成功:我不想再去结帐了

从“React”导入React;
从'@react navigation/stack'导入{createStackNavigator};
从“../contexts/order”导入{OrderProvider};
从“../pages/Home”导入主页;
从“../pages/Checkout”导入签出;
从“../pages/Checkout/Success”导入成功;
const AppStack=createStackNavigator();
常数批准=()=>(

您可以执行以下操作:

const Home = () => {
  useFocusEffect(
    React.useCallback(() => {
      const onBackPress = () => {
        return true;
      };

      BackHandler.addEventListener('hardwareBackPress', onBackPress);

      return () =>
        BackHandler.removeEventListener('hardwareBackPress', onBackPress);
    }, []),
  );
  // ...
};

我将其设置为,当调用
硬件backpress
事件时,单击
主页
屏幕返回
不会产生任何效果

对于
Success
屏幕,我导航回
Home

我想这就是你在阅读你的问题时寻找的行为


重要的是不要忘记从导入
useFocusEffect
无论您在何处使用它,都会对导航作出反应:

import { useFocusEffect } from '@react-navigation/native';

react导航文档中解释了在
硬件backpress
事件处理程序函数中何时返回
true
false

从onBackPress返回true表示我们已经处理了 事件和react导航的侦听器将不会被调用,因此不会被调用 弹出屏幕。返回false将导致事件冒泡 导航的侦听器将弹出屏幕

如果您想阅读更多内容,请阅读以下文档:

const Home = () => {
  useFocusEffect(
    React.useCallback(() => {
      const onBackPress = () => {
        return true;
      };

      BackHandler.addEventListener('hardwareBackPress', onBackPress);

      return () =>
        BackHandler.removeEventListener('hardwareBackPress', onBackPress);
    }, []),
  );
  // ...
};
const Success = ({navigation}) => {
  useFocusEffect(
    React.useCallback(() => {
      const onBackPress = () => {
        navigation.navigate('Home');
        return true;
      };

      BackHandler.addEventListener('hardwareBackPress', onBackPress);

      return () =>
        BackHandler.removeEventListener('hardwareBackPress', onBackPress);
    }, []),
  );
  // ...
};
import { useFocusEffect } from '@react-navigation/native';