2016-09-27 68 views
3

所以最初我的应用程序是给店里分量罚款index.ios.js像这样:在使用NavigatorIOS时,React Native如何将商店传递给Component?

class Laybium extends Component { 
    render() { 
    return (
     <Provider store={store}> 
     <AudioPlayerPage /> 
     </Provider> 
    ); 
    } 
} 

但是我想添加一些更多的屏幕,所以我用NavigatorIOS像这样:

class Laybium extends Component { 
    render() { 
    return (
     <Provider store={store}> 
     <NavigatorIOS 
      initialRoute={{ 
      component: Screen1, 
      title: 'Screen 1: Pick username' 
      }} 
      style={{flex: 1}} 
     /> 
     </Provider> 
    ); 
    } 
} 

这使我的应用程序去 - >屏幕1 - >屏幕2 - >屏幕3 - > AudioPlayerPage(我显示的原始屏幕)。

屏幕1 - > 2 - > 3的转换正常工作。但现在我不知道如何提供商店和道具给我的组件AudioPlayerPage?由于将NavigatorIOS组件包装在Provider组件中似乎不起作用。

这里是我的Screen3.js过渡至我的部件AudioPlayerPage

class Screen3 extends Component { 
    static propTypes = { 
     navigator: PropTypes.object.isRequired 
    } 

    constructor(props, context) { 
     super(props, context); 
     this._onForward = this._onForward.bind(this); 
    } 

    _onForward() { 
     this.props.navigator.push({ 
     component: AudioPlayerPage, 
     title: 'AudioPlayer: play synced song' 
     // TODO: pass store 
     }); 
    } 

    render() { 
     return (
      <View style={styles.container}> 
      <Text style={styles.text}>Screen3</Text> 

      <TouchableHighlight style={styles.button} 
       onPress={this._onForward} 
       underlayColor='#99d9f4'> 
       <Text style={styles.buttonText}>Go to AudioPlayerPage</Text> 
      </TouchableHighlight> 
      </View> 
    ); 
    } 
} 

回答

2

我没有用NavigatorIOS自己,但使用反应本地路由器通量,我把从我的部件像这样dispatchthis.props.dispatch(someAction())。至于商店的状态,我通过mapStateToProps回调来访问它。要接收回调,应首先使用connect(mapStateToProps)(ComponentName)连接组件。

+0

什么版本的反应和react-native你有你package.json?我无法通过“反应”来构建:“15.0.2”,“react-native”:“0.26.3”,“react-native-router-flux”:“^ 3.35.0”,with和没有^ –

+0

也我有Xcode版本7.3.1 –

+0

我正在使用反应15.3.1,react-native 0.33.0,并且react-native-router-flux^3.35.0。我还没有尝试过iOS,但只适用于Android。 – George

相关问题