1. ホーム
  2. reactjs

[解決済み] リアクトナビゲーションで戻るボタンを無効にする

2022-11-25 22:21:53

質問

react native navigation (react-navigation) StackNavigatorを使用しています。 アプリのライフサイクル全体を通して、ログインページからスタートします。私は、ログイン画面に戻るオプションを持ちたくありません。ログイン画面の後の画面に非表示にする方法をご存知の方はいらっしゃいませんか? ちなみに、ログイン画面でも、使って隠しています。

const MainStack = StackNavigator({
  Login: {
    screen: Login,
    navigationOptions: {
      title: "Login",
      header: {
        visible: false,
      },
    },
  },
  // ... other screens here
})

どのように解決するのですか?

1) react-navigation v2以降で戻るボタンを消すには。

v2-v4です。

navigationOptions:  {
    title: 'MyScreen',
    headerLeft: null
}

v5 :

{     
    navigationOptions:  {
    title: 'MyScreen',
    headerLeft: ()=> null, // Note: using just `null` instead of a function should also work but could trigger a TS error
}

2) ナビゲーションスタックをきれいにしたい場合。

ナビゲーションしたい元の画面にいると仮定して。

react-navigationのバージョンv5以降を使用している場合。 を使用することができます。 navigation.reset または CommonActions.reset :

 // Replace current navigation state with a new one,
 // index value will be the current active route:

navigation.reset({
  index: 0,
  routes: [{ name: 'Profile' }],
});

ソースと詳細はこちら。 https://reactnavigation.org/docs/navigation-prop/#reset

または

navigation.dispatch(
  CommonActions.reset({
    index: 1,
    routes: [
      { name: 'Home' },
      {
        name: 'Profile',
        params: { user: 'jane' },
      },
    ],
  })
);

ソースと詳細はこちら。 https://reactnavigation.org/docs/navigation-actions/#reset

react-navigationの古いバージョン用。

v2-v4 使用 StackActions.reset(...)

import { StackActions, NavigationActions } from 'react-navigation';

const resetAction = StackActions.reset({
  index: 0, // <-- currect active route from actions array
  actions: [
    NavigationActions.navigate({ routeName: 'myRouteWithDisabledBackFunctionality' }),
  ],
});

this.props.navigation.dispatch(resetAction);

v1 使用 NavigationActions.reset

3) Androidの場合、BackHandlerを使用してハードウェアバックボタンを無効にする必要があります。 :

http://reactnative.dev/docs/backhandler.html

またはフックを使用する場合。

https://github.com/react-native-community/hooks#usebackhandler

ナビゲーションスタックが空の場合、アンドロイドハードウェアのバックボタンが押されると、アプリは終了します。

追加情報: 以下のコメントを追加して、この回答を v5 用に更新するのを助けてくれたユーザーに感謝します。