在RouteMapper中访问上下文

时间:2016-04-21 05:23:00

标签: javascript react-native ecmascript-6

有没有办法在RouteMapper中获取this.context? 我可以在this.context.openMenu中致电Playground

我有以下内容:

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>
        )
    },
    ...
}

1 个答案:

答案 0 :(得分:0)

我已经得出了这个结论。

由于我可以访问this.context中的Playground,因此我执行了此操作:

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

然后在RouteMapper中,我这样做了:

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

有效,但不确定这是否是正确的方法。