Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.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
Javascript 如何覆盖backButton的行为以响应本机导航_Javascript_Reactjs_React Native_React Native Navigation - Fatal编程技术网

Javascript 如何覆盖backButton的行为以响应本机导航

Javascript 如何覆盖backButton的行为以响应本机导航,javascript,reactjs,react-native,react-native-navigation,Javascript,Reactjs,React Native,React Native Navigation,我正在使用react本机应用程序进行导航。我有一个问题,假设有三个cmp A、B、C。从comp A有一个历史。执行push()重定向到cmp B,然后cmp B是一个路径匹配器,其中根据从A推送的路径呈现特定组件,假设cmp B匹配路径,然后呈现C cmp,其中C有如下smth: 代码: 因此,C cmp将一个新屏幕推到堆栈上,因此在从导航单击后退时,我希望将我重定向到a而不是B。我如何更改后退按钮的行为或以某种方式禁用它?按后退按钮将我重定向回cmp B当前,我不想 谢谢。您可以使用navi

我正在使用react本机应用程序进行导航。我有一个问题,假设有三个cmp A、B、C。从comp A有一个历史。执行push()重定向到cmp B,然后cmp B是一个路径匹配器,其中根据从A推送的路径呈现特定组件,假设cmp B匹配路径,然后呈现C cmp,其中C有如下smth:

代码:

因此,C cmp将一个新屏幕推到堆栈上,因此在从导航单击后退时,我希望将我重定向到a而不是B。我如何更改后退按钮的行为或以某种方式禁用它?按后退按钮将我重定向回cmp B当前,我不想


谢谢。

您可以使用
navigation.addListener()
更改返回时的行为。我发现它有点笨重,但它可以工作——在我们的例子中,如果数据丢失,我们会警告返回。我们还必须区分“保存”和“返回”按钮,这是通过在按下“保存”按钮时设置状态标志来实现的。以下是挂钩的外观-我认为它应该适合您的需要:

//基于:https://reactnavigation.org/docs/preventing-going-back/
函数useAlertongBack({
编辑,,
迪萨弗,
}: {
编辑:布尔;
didSave:布尔;
}) {
const navigation=useNavigation();
useffect(()=>{
const unsubscribe=navigation.addListener(“beforeRemove”,e=>{
如果(!hasdedited | | didSave){
//没有听众
返回;
}
//防止离开屏幕的默认行为
e、 预防默认值();
显示没有savingalert(()=>navigation.dispatch(e.data.action));
});
退订;
},[hasdedited,navigation,didSave]);
}
导出函数showExitWithoutSavingAlert(dismissScreen:()=>void){
//在离开屏幕前提示用户
Alert.Alert(“放弃未保存的更改?”,未定义[
{
文本:“放弃更改”,
风格:“破坏性”,
//如果用户确认了,那么我们将发送先前阻止的操作
//这将继续触发删除屏幕的操作
onPress:dismissScreen,
},
{文本:“取消”,样式:“取消”,按:()=>{},
]);
}
您可以尝试这种方法
              Navigation.push(componentId, {
                component: {
                    id: 'BottomSheetRollupView',
                    name: 'bottomSheet.Rollup',
                    passProps: {
                        component,
                        passProps,
                    },
                    options: {
                        statusBar: {
                            style: Platform.select({android: 'light', ios: 'dark'}),
                        },
                    },
                },
            });