2016-11-15 35 views
0

我有React Native應用程序,當我需要返回時,我正在使用navigator.back()。 但我注意到了這個問題。例如,如果我有三頁A,B,C和我以A開頭,那麼我去B,去C,然後回到B,現在如果我打電話給navigator.back(),它會把我帶到頁面C,但我期望看到頁面A.如何使導航器正常工作?

有沒有人知道如何解決這個問題?

這裏是我的代碼示例:

import React, { Component } from 'react' 
     import { 
      StyleSheet, 
      View, 
      StatusBar, 
      Navigator 
     } from 'react-native' 
    ... 
     _renderScene (route, navigator) { 
      switch (route.name) { 
       case RouteName.Home: 
       return <Home navigator={navigator} /> 
       case RouteName.Library: 
       return <Library navigator={navigator} /> 
       case RouteName.BookDetails: 
       return <Details navigator={navigator} book={route.passProps.book} /> 
     default: 
       console.error('Encountered unexpected route: ' + route.name) 
      } 
      return <Home /> 
      } 

... 

    export class Library extends React.Component { 
     constructor (props) { 
     super(props) 
     } 

     render(){ 
     return (
      <View style={styles.library}> 
       <Header title={LocalizationService.translate('MyLibrary')} navigator={this.props.navigator} /> 
       <ScrollView> 
       <Accordion 
        ref='accordion' 
        sections={this.state.sections} 
        initiallyActiveSection={0} 
        renderHeader={this._renderHeader} 
        renderContent={this._renderContent.bind(this)} 
       /> 
       </ScrollView> 
      </View> 
     ) 
     } 
    } 


    export class Header extends Component { 
     constructor (props) { 
     super(props) 

     this.state = { 
      title: '' 
     } 

     this._onClose = this._onClose.bind(this) 
     } 


     _onClose() { 
     let { onClose, navigator } = this.props 

     if (onClose) { 
      onClose() 
     } else { 
      navigator && navigator.pop() 
     } 
     } 
    } 

    Header.propTypes = { 
     title: React.PropTypes.string, 
     navigator: React.PropTypes.object, 
     onClose: React.PropTypes.func 
    } 
+0

這聽起來不像正常的行爲。你確定你要*回到*而不是*轉發*到B嗎? – Quentin

+0

當我從C到B我使用這種方法:_goBack(){ this.props.navigator.back() } – Dmitry

+0

_renderScene(route,navigator){ switch(route.name){case RouteName。 bookDetails: return

Dmitry

回答

0

好像你正在尋找的方法是.pop()

https://facebook.github.io/react-native/docs/navigator.html#pop

調用navigator.pop()將卸載的頂部組件堆棧並轉到前一個。

+0

我試過這種方法,但由於某種原因它根本不起作用。也許我必須改變別的東西來使用pop()。 @john_ryan – Dmitry

+0

是的,如果你能完整的代碼示例給你的問題,它可能會有助於指出問題,例如如何設置導航器以及如何將導航器傳遞到組件。 –

+0

添加了代碼示例。 @john_ryan – Dmitry