2017-06-12 4 views
3

私はreact-navigation:^1.0.0-beta.9を使用しています。特定の画面に戻る方法はありますか? react-navigationreduxに統合しました。私はドキュメントを調べて、がkeyパラメータを受け入れることを見たが、これは私には不明であり、back({ key: 'Screen B' })のように画面の名前に配置しようとしたが、指定されない限りランダムに生成されるkey具体的には例えばリアクションナビゲーション、特定の画面に戻るにはどうすればいいですか?

私はこのStackNavigator

Screen A 
- Screen B 
    - Screen C 
    - Screen D (Current) 

はのは、私がScreen Dに現在と私は、私はそれを達成する方法をバックScreen Bに行きたいと思ったとしましょうか?

私はnavigation.navigate('Screen B')を使用したくありません。これは、スタックに別の画面を追加して、私が期待しているものではないためです。

+0

screen Bへあなたはthis.props.navigation.goBack( "keyOfC")を使うことができます。もしBに行くにはkeyOfCを使います。ルート名ではなく、キーでなければなりません。ところで、私は手動でキーを設定する方法がわかりません。 – KimHau

+0

@KimHauええ私もそれに気づいた。しかし、その「鍵」は無作為に生成されていると私は信じています。 – JohnnyQ

答えて

12

1.Inside screen D派遣何らかのアクション:

const {navigation} = this.props; 
    navigation.dispatch({ 
     routeName: 'B', 
     type: 'GoToRoute', 
    }); 

2.Handle MyStackNavigator.js

const MyStackNavigator = new StackNavigator(//...); 
const defaultGetStateForAction = MyStackNavigator.router.getStateForAction; 
MyStackNavigator.router.getStateForAction = (action, state) => {    
    if (state && action.type === 'GoToRoute') {   
     let index = state.routes.findIndex((item) => { 
      return item.routeName === action.routeName 
     }); 
     const routes = state.routes.slice(0, index+1); 
     return { 
      routes, 
      index 
     };  
    }  
    return defaultGetStateForAction(action, state); 
}; 

とし、このアクションは、あなたが行くことができるからscreen D私は見つける直接

+0

返されたオブジェクトに '... state'を追加しなければならなかった"ルートにはrouteNameがないので設定を取得できません "というエラーが発生しました:' return {... state、routes、index} ' – Zsolt

+0

これは私のプロジェクトを保存しました彼らは実際にナビゲーションオプションを改善する必要があります。 –

+0

これまでの画面の表示を削除する方法はありますか? –

関連する問題