2017-10-30 6 views
0

数え切れないほどの反応ナビゲーションドキュメントを読んだことがありますが、これはどういう方法があるのでしょうか?私は自明ではなく、間違いなく直感的ではないと呼ぶだろう。ナビゲーションスタックを同時にリセットするときに子スタックナビゲータから親に戻る方法React Native

私は、ルートナビゲーションスタックを持っている:

export const NavigationStack = StackNavigator({ 
    Splash: { 
     screen: Splash 
    }, 
    Signup: { 
     screen: Signup 
    }, 
    Login: { 
     screen: SignIn 
    }, 
    ForgottenPassword: { 
     screen: ForgottenPassword 
    }, 
    Discover: { 
     screen: Discover 
    }, 
    ProfileShow: { 
     screen: ProfileShow 
    } 
}, { 
    headerMode: 'none' 
}) 

ForgottenPassword画面が子供スタックナビゲーターである:そのindex.jsコンテナコンポーネントに

import { StackNavigator } from 'react-navigation' 
import PasswordResetProcess from './index' 

const ForgottenPassword = StackNavigator({ 
    ResetPassword: { 
     screen: PasswordResetProcess 
    } 
}, { 
     headerMode: 'none' 
    }) 

export default ForgottenPassword 

、私はナビゲーションを渡すサブコンポーネントがありますこのように:

switch (lastCompletedStep) { 
     case NEW_RESET_REQUEST: 
      return <InputTel navigation={navigation} /> 

     case INPUT_TEL: 
      return <ResetPassword navigation={navigation} /> 

これはですコンポーネントは問題のコンポーネントです。これは、アクションの作成者をトリガーとアクションの作成者にthis.props.navigationを渡します。このアクションクリエーターの内側から

await props.handleResetSubmit(token, props.navigation) 

props.navigationnavigationとして利用可能です。

navigation.navigate('Discover') // see how this is from the root Navigation Stack 

私は、しかし、これを行うことはできません:それは、このエラーをスロー

navigation.dispatch({ 
    type: 'Navigation/RESET', 
    index: 0, 
    actions: [{ type: 'Navigate', routeName: 'Discover' }] 
}) 

:私はこの罰金を行うことができます

enter image description here は、[編集]私はちょうどこれを試してみましたし、それはまた、生成されました同じエラー:

navigation.dispatch(NavigationActions.reset({ 
     index: 0, 
     actions: [NavigationActions.navigate({ routeName: 'Discover' })] 
    })) 

How do I reset the stack while navigating to Discover from here?

答えは、何らかの子操作と同時にスタックを検出してリセットするように移動することですが、どこに配置するのかわかりません。 react-navigationのドキュメントは、親から子への操作を説明するためには恐ろしいものです。ここで

は、それが約ように見えるしているもので、私の最高の推測です:

navigation.dispatch({ 
    type: 'Navigation/NAVIGATE', 
    routeName: 'Discover', 
    actions: [{ type: 'Reset', index: 0, key: null }] 
}) 
+0

ダング、私は 'key:null'を追加して解決しました。私は以下の答えとしてそれを掲示するでしょう。 – agm1984

答えて

0

私は、このコードでそれを解決:

navigation.dispatch(NavigationActions.reset({ 
    index: 0, 
    key: null, 
    actions: [NavigationActions.navigate({ routeName: 'Discover' })] 
})) 

を秘密は、私が持っているkey: nullを、追加することでした以前に見た人々。あなたがリセットしている時代には非常に重要な要素です。ここで

は、私はそれはそれを示したドキュメントです:

https://github.com/react-community/react-navigation/issues/1127

私はNavigationActionsがルートナビゲーションスタックの知識を持っているので、これはうまくいくと思うが、それは文脈で(navigation.navigate('Discover')が働いていたのと同じ理由のために働きますこの質問の私のコードの)。

関連する問題