2017-10-28 93 views
0

我擁有當前的屏幕流。StackNavigation不會將屏幕添加到堆棧React Native

首頁 - >信息 - >登錄 - >相機。

問題是我不想將登錄名添加到堆棧中,因爲當您從相機返回時,您將返回登錄,而不是信息。

如果我使用this.props.navigate('Info')從相機,那麼問題是現在回到相機,而不是從信息回家。注意我也不想在登錄頁面完成刪除堆棧,就像我在這裏看到使用復位功能(https://reactnavigation.org/docs/navigators/navigation-actions#Reset)。

理想我想怎樣做是:

首頁 - >信息 - >登錄(不添加到堆) - >攝像頭。

這是我可以從相機到信息和從信息回到家。

有沒有人找到一個很好的解決方法呢?

感謝

+0

我能問爲什麼「重置」是不是正在考慮這種情況?我想你可能會過度複雜的應用程序流或誤解React-Navigation庫。 – Eduard

+0

將重置刪除整個堆棧還是僅刪除最後一個登錄頁面?謝謝 – SwimmingG

+0

@Eduard它會刪除整個堆棧,但您可以直接重新創建堆棧,省略登錄頁面。如果這就是你想要做的,我可以告訴你如何。 – Eduard

回答

1

如果你想保留的全部籌碼,而params,僅開溝登錄頁面,那麼你既可以在攝像機頁面使用Reset Navigation Action

import { NavigationActions } from 'react-navigation' 

const resetAction = NavigationActions.reset({ 
    index: 1, 
    actions: [ 
    NavigationActions.navigate({ routeName: 'Home', params: this.props.navigation.state.params }) 
    NavigationActions.navigate({ routeName: 'Info', params: this.props.navigation.state.params }) 
    ] 
}) 
this.props.navigation.dispatch(resetAction) 

這樣,您將:

  1. 導航到主頁頂部的信息頁面,這意味着後退按鈕將導致主頁。
  2. 如果需要,請保留參數。如果你不只是不通過它們。

此功能可以添加到任何位置:組件內部/動作創作者/內部後退按鈕。

或者爲後退按鈕添加相同的代碼。在這種情況下,你需要把它添加到相機路徑的navigationOptions:

const backButton = ({ navigation }) => ({ 
     headerLeft: <TouchableOpacity 
        onPress={() => { 
        // the code from above, except for import line and using navigation.whatever instead of this.props.navigation.whatever 
        }} 
       ><Text>Back</Text> // this is a text of a back button, you could also use an icon 
       </TouchableOpacity> 
}); 

導航:

const MyStack = StackNavigator({ 
    home: { screen: Home }, 
    info: { screen: Info }, 
    login: { screen: Login }, 
    camera: { screen: Camera }, navigationOptions: backButton }); 
+0

我會給它一個去感謝!我發現照相機屏幕背面的問題是,當你從相機 - >信息返回時,從Info返回到相機而不是Map!這會創建一個用戶無法擺脫的循環。 – SwimmingG

+0

@SwimmingG此解決方案將解決您的問題。隨意問你是否還有其他問題。 – Eduard

+1

嗨Eduard!謝謝你的提示。我得到它的工作,就像任何其他人被困在這個索引字段,是你想要活躍的屏幕索引(所以在我的情況下,它會是2),因爲我想讓相機積極點。再次感謝! – SwimmingG