/** * Sample React Native App * https://github.com/facebook/react-native * @flow */ import React, {Component, Children, createElement, PropTypes} from 'react'; import { StyleSheet, Text, View, Navigator } from 'react-native'; class NavigatorProvider extends Component { getChildContext() { return { navigator: this.props.navigator } } render() { return Children.only(this.props.children) } } NavigatorProvider.childContextTypes = {navigator: PropTypes.any} const withNavigator = (mapNavigator) => (BaseComponent) => { class WithNavigator extends Component { render() { const actions = mapNavigator(this.context.navigator); return createElement(BaseComponent, {...this.props, ...actions}) } } WithNavigator.contextTypes = {navigator: PropTypes.any} return WithNavigator } function Main({pushContent}) { return ( Main View Push ) } const MainWithNav = withNavigator(n=> ({ pushContent: ()=>n.push({name: 'Content'}) }))(Main) function Content({back}) { return ( Content View Back ); } const ContentWithNav = withNavigator(n=>({ back: n.pop }))(Content) export default class NavigatorApp extends Component { render() { return ( this.renderScene(r, n)} /> ); } renderScene(route, navigator) { return ( {this.elementForScene(route)} ) } elementForScene(route) { if (route.name === 'Main') { return } if (route.name === 'Content') { return } } } const styles = StyleSheet.create({ fullCenter: { flex: 1, justifyContent: 'center', }, textCenter: { textAlign: 'center' } })