web-dev-qa-db-ja.com

Reactネイティブのクリアスタックナビゲータースタック

1つずつ移動する画面がいくつかあります。 Screen1-> screen2-screen3-> screen4-Home

私が欲しいのは、家に帰ったときに以前のナビゲーション履歴をクリアし、戻るボタンを押して最後にナビゲートした画面4に移動しないようにすることです。現在、ホーム画面で戻るボタンを押すと、スタックの最後のルートであるscreen4。以下のコードを使用しました。ルートが定義されていないか、キーホームがエラーです。これはScreensクラスですでに定義しています。任意の助けいただければ幸いです。

const resetAction = NavigationActions.reset({
  index: 0,                       
  actions: [NavigationActions.navigate({ routeName: 'Home' })],
});

onPress={() =>  this.props.navigation.dispatch(resetAction)}
6
Paras Watts

答えはcreateSwitchNavigatorであり、ナビゲーションを積み上げません。認証画面/ナビゲーターをホーム画面/スタックのあるcreateSwitchNavigatorに追加します。

そのため、ホームからナビゲートしてログインすると、スタックは保持されません。

詳しくは https://reactnavigation.org/docs/en/auth-flow.html

4
Nelson Bass
import {NavigationActions} from 'react-navigation';                
const resetAction = NavigationActions.reset({
    index: 0,
    actions: [
      NavigationActions.navigate({ routeName: 'HomeScreen'})
    ] })
this.props.navigation.dispatch(resetAction);

あなたはこれを使うことができます、これは私のために働きます。

3
fazeel zama

reset-navigation docs for reset action に記載されているように、indexは現在アクティブなルートのインデックスである必要があります。エラーはそれに関連している可能性があります。

インデックスパラメータの使用方法

Indexパラメータは、現在アクティブなルートを指定するために使用されます。例:プロファイルと設定の2つのルートを持つ基本的なスタックナビゲーションが指定されています。アクティブな画面が[設定]である点に状態をリセットしますが、プロファイル画面の上に重ねるには、次のようにします。

import { NavigationActions } from 'react-navigation'

const resetAction = NavigationActions.reset({
  index: 1,
  actions: [
    NavigationActions.navigate({ routeName: 'Profile'}),
    NavigationActions.navigate({ routeName: 'Settings'})
  ]
})
this.props.navigation.dispatch(resetAction)
3
bennygenel