2017-06-20 66 views
6

我正在構建一個應用程序,其導航基於來自react-navigation庫的DrawerNavigator。如何重置嵌套在DrawerNavigatior中的StackNavigator的狀態?

這種導航有3個標籤:

  • 2個常規選項卡
  • 1 StackNavigator名爲 「搜索」

的StackNavigator由一個屏幕,讓一個項目的用戶搜索,並用戶看到搜索結果的第二個屏幕。

我不希望搜索結果頁面是DrawerNavigator的選項卡,這就是我實現此結構的原因。

問題是:如果用戶已經執行搜索,當他點擊「搜索」選項卡時,他不會回到搜索屏幕,而是回到搜索結果屏幕。我寧願用戶回到搜索屏幕。

我該如何做到這一點?

回答

1

您可以用achive navigationActions

import { NavigationActions } from 'react-navigation'; 

const resetAction = NavigationActions.reset({ 
    index: 0, 
    actions: [ 
    NavigationActions.navigate({ 
     routeName: 'DrawerScreen', 
     params: {}, 
     action: NavigationActions.navigate({ routeName: 'SearchScreen' }), 
    }), 
    ], 
}) 
navigation.dispatch(resetAction) 
+0

爲此,我需要捕獲DrawerNavigator中「搜索」選項卡上的單擊事件。你知道我怎麼能抓住這個事件? – Arnaud

+0

請看看這個鏈接 https://stackoverflow.com/questions/44801667/navigate-to-root-screen-from-nested-stack-navigator?noredirect=1#comment76584210_44801667 – Siddharth

0
import { NavigationActions } from 'react-navigation'; 

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

在這裏,你的按鈕或事件的任何元素添加此本使用導航調度: this.props.navigation.dispatch(resetAction)

<Button 
    onPress= { 
     () => this.props.navigation.dispatch(resetAction) 
    } 
    title='Back to Search' 
/>