2016-04-21 69 views
0

有沒有辦法在RouteMapper中獲得this.context? 我可以撥打Playground致電this.context.openMenu在RouteMapper中訪問上下文

我有以下幾點:

class App extends Component { 
    ... 
    renderScene(route, navigator) { 
     return (
      <Playground navigator={navigator} /> 
     ) 
    } 

    render() { 
     return (
      <Navigator 
       ref="nav" 
       renderScene={this._renderScene.bind(this)} /> 
     ) 
    } 
} 
App.childContextTypes = { 
    openMenu: React.PropTypes.func 
} 

這是遊樂場:

class Playground extends Component { 
    ... 
    render() { 
     return (
      <Navigator 
       renderScene={this.renderScene.bind(this)} 
       navigator={this.props.navigator} 
       navigationBar={ 
        <Navigator.NavigationBar style={Styles.navBar} 
         routeMapper={PlaygroundMapper} /> 
      } /> 
     ) 
    } 
} 

Playground.contextTypes = { 
    openMenu: React.PropTypes.func 
} 

然後PlaygroundMapper:

export default { 
    LeftButton(route, navigator, index, navState) { 
     return (
      <TouchableOpacity onPress={() => this.context.openMenu}> 
       <Text>Menu</Text> 
      </TouchableOpacity> 
     ) 
    }, 
    ... 
} 

回答

0

我得出這個結論。

因爲我在Playground訪問this.context,我這樣做:在RouteMapper

<Navigator.NavigationBar 
    style={Styles.navBar} 
    routeMapper={ArticlesRouteMapper(this.context)} /> 
} /> 

然後,我這樣做:

export default (context) => ({ 
    LeftButton(route, navigator, index, navState) { 
     return <Hamburger _onPress={() => context.openMenu()} /> 
    }, 
}) 

作品,但不知道這是正確的方法來做到這一點。