2016-07-22 84 views
0

用我的index.ios.js反應母語抽屜(https://github.com/root-two/react-native-drawer),我有以下設置,並試圖通過「導航」參考爲內容的< DrawerPanel/<抽屜/>的>。我console.log(this.props.navigator)在< DrawerPanel />但是當我試圖做類似於this.props.navigator.replace()的時候傳入一個錯誤的導航器引用在< DrawerPanel />如何將導航器引用傳遞給React Native <Drawer/>?

如何傳遞正確的導航器構造函數,例如傳入renderScene和configureScene? :

class practice extends Component { 
    ... 
    renderScene(route, navigator){ 
     ... 
    } 

    configureScene(route, routeStack){ 
     ... 
    } 

    render() { 
     return (
      <Drawer 
      content={<DrawerPanel navigator={navigator}/>} 
      ... 
      > 
      <Navigator 
       configureScene={this.configureScene} 
       initialRoute={{name: 'Login', component: Login}} 
       renderScene={this.renderScene} 
       style={styles.container} 
       navigationBar={ 
       <Navigator.NavigationBar 
        style={styles.navBar} 
        routeMapper={NavigationBarRouteMapper(this.openDrawer)} 
       /> 
       } 
      /> 
     </Drawer> 
    ); 
    } 
} 

預先感謝您!

更新3 ****

在我<DrawelPanel/>

import HomePage from './HomePage' 

render(){ 

var pr = this.props 
var navigator = pr.getNav() 

return (
    <View style={{flex:1, padding: 30, backgroundColor: 'black'}}> 
     <MadeButton 
      componentName={HomePage} 
      navigator={navigator} 
      pageName='HomePage' 
      style={{fontSize:15, fontWeight:'bold', color:'white'}} 
     /> 
    </View> 
) 

然後在我的<MadeButton/>

static propTypes = { 
    componentName: React.PropTypes.any, 
    navigator: React.PropTypes.any, 
    pageName: React.PropTypes.string, 
    style: React.PropTypes.object 
    } 

    _navigate(type='Normal'){ 
    this.props.navigator.replace({ 
     component: this.props.componentName, 
     type: type, 
     name: this.props.pageName 
    }) 
    } 

    render(){ 
    var pr = this.props; 
    var st = this.state; 
    var styles = pr.style; 

    return(
     <TouchableHighlight onPress={() => this._navigate()}> 
     <Text style={styles}>{pr.pageName}</Text> 
     </TouchableHighlight> 
    ) 
    } 

回答

0

我認爲你是錯的。如果你使用,不應該有相同的父節點。

const Drawer = <Drawer 
        content={<DrawerPanel navigator={navigator}/>} 
        ... 
       /> 
<Navigator 
    initialRoute={{ name: 'Drawer', component: Drawer }} 
    renderScene={(route, navigator) => 
    configureScene={(route) => { 
    return Navigator.SceneConfigs.VerticalDownSwipeJump; 
    }} 
    renderScene={(route, navigator) => { 
    let Component = route.component; 
    return <Component {...route.params} navigator={navigator} /> 
    }} /> 
    } 
/> 
+0

我在原帖中增加了更多細節。請看一下。它確實做錯了嗎?我被告知這就是它應該如何設置的。 –

+0

我知道你的意思!我認爲''它不是可以使用'Navigator'的容器。就像模型不能在0.17.0 –

+0

中使用ScrollView那麼我怎麼能在中使用諸如this.props.navigator.replace()之類的函數呢? –

1

這是應該如何完成的。您保存導航器參考表renderScene方法定義一個getter方法,將該方法傳遞給您想要的組件。

class practice extends Component { 
 
    ... 
 
    renderScene(route, navigator){ 
 
     this._navigator = navigator 
 
    } 
 

 
    configureScene(route, routeStack){ 
 
     ... 
 
    } 
 
     
 
    getNav =() => { 
 
     return this._navigator 
 
    } 
 

 
    render() { 
 
     return (
 
      <Drawer 
 
      content={<DrawerPanel getNav={this.getNav}/>} 
 
      ... 
 
      > 
 
      <Navigator 
 
       configureScene={this.configureScene} 
 
       initialRoute={{name: 'Login', component: Login}} 
 
       renderScene={(route, navigator) => this.renderScene(route, navigator)} 
 
       style={styles.container} 
 
       navigationBar={ 
 
       <Navigator.NavigationBar 
 
        style={styles.navBar} 
 
        routeMapper={NavigationBarRouteMapper(this.openDrawer)} 
 
       /> 
 
       } 
 
      /> 
 
     </Drawer> 
 
    ); 
 
    } 
 
}

+0

試過但在renderScene()中出現以下錯誤:'無法添加屬性_navigator,對象不可擴展'。可能是什麼問題? –

+0

'this'默認沒有綁定。你需要做'renderScene = {(route,navigator)=> renderScene(route,navigator)}'。我已經更新了示例以反映更改。 –

+0

我相信這是正確的答案。 – lalkmim

0

在更新2,你這樣做:var navigator = pr.getNav。這隻會將getNav函數分配給您剛剛定義的導航器變量。所以你的導航器只是對getNav函數的引用。

你需要做的是var navigator = pr.getNav(),然後通過導航器MadeButton。希望澄清事情。

+0

啊,明白了。嘗試建議,但得到錯誤'不能讀取屬性'取代'未定義'。所以我在'MadeButton'中嘗試了'console.log(this.props.navigator)',但是得到了'undefined'。不知道這是否可能是問題,但這就是我在'MadeButton'中調用navigator.replace的方法:' this.navigate()}> ... '和_navigate(),'this.props.navigator.replace({...})'。 –

+0

您是否在getNav()之後獲取DrawerPanel上的導航器對象。你也可以更新這個問題嗎? –

+0

我使用UPDATED 3 ****下的更新代碼更新了原始帖子。請看一下。有一個非常奇怪的例子。有時,通過pr.getNav(),導航器被正確讀取,並且''導航正確。但有時,當刷新模擬器時,導航器未定義,因此''出現錯誤:「無法讀取屬性」替換「未定義」。我很困惑什麼可能是錯誤... –

相關問題