2017-01-24 25 views
0

私はindex.android.jsに1つのコンポーネントを持つreact-nativeプログラミングを学習しています。私はそのコンポーネントにTouchableOpacityを持っています。 TouchableOpacityをクリックして次のコンポーネントを起動したいと考えています。反応したネイティブの別のコンポーネントを起動する方法

<TouchableOpacity style={{ height: 40, marginTop: 10 , backgroundColor: '#2E8B57'}} onPress={}> 
    <Text style={{color: 'white', textAlign: 'center', marginTop: 10, fontWeight: 'bold'}}>LOGIN</Text> 
</TouchableOpacity> 

は、誰もがどのようにonPressとどのようにこの上をクリックで次のコンポーネントを起動するには、リスナーをクリックして設定できることを示唆していることができます。

ありがとうございます。

+0

次のコンポーネントを開始することはどういう意味ですか?コンポーネントを隠して表示するという意味ですか? – Ajackster

+0

これは反応ネイティブとは関係ありません。基本的なOOPです。 –

答えて

0

このlink

を参照してください。この

'use strict'; 

var React = require('react-native'); 

var { 
    AppRegistry, 
    StyleSheet, 
    Text, 
    View, 
    Navigator, 
    TouchableOpacity, 
} = React; 

var CustomLeftToRightGesture = Object.assign({}, BaseConfig.gestures.pop, { 
    snapVelocity: 8, 
}); 

var CustomSceneConfig = Object.assign({}, BaseConfig, { 

    springTension: 100, 
    springFriction: 1, 
    gestures: { 
    pop: CustomLeftToRightGesture, 
    } 
}); 

var PageOne = React.createClass({ 
    _handlePress() { 
    this.props.navigator.push({id: 2,}); 
    }, 
    render() { 
    return (
     <View style={[styles.container, {backgroundColor: 'green'}]}> 
     <Text style={styles.welcome}>Greetings!</Text> 
     <TouchableOpacity onPress={this._handlePress}> 
      <View style={{paddingVertical: 10, paddingHorizontal: 20, backgroundColor: 'black'}}> 
      <Text style={styles.welcome}>Go to page two</Text> 
      </View> 
     </TouchableOpacity> 
     </View> 
    ) 
    }, 
}); 

var PageTwo = React.createClass({ 
    _handlePress() { 
    this.props.navigator.pop(); 
    }, 

    render() { 
    return (
     <View style={[styles.container, {backgroundColor: 'purple'}]}> 
     <Text style={styles.welcome}>This is page two!</Text> 
     <TouchableOpacity onPress={this._handlePress}> 
      <View style={{paddingVertical: 10, paddingHorizontal: 20, backgroundColor: 'black'}}> 
      <Text style={styles.welcome}>Go back</Text> 
      </View> 
     </TouchableOpacity> 
     </View> 
    ) 
    }, 
}); 

var SampleApp = React.createClass({ 
    _renderScene(route, navigator) { 
    if (route.id === 1) { 
     return <PageOne navigator={navigator} /> 
    } else if (route.id === 2) { 
     return <PageTwo navigator={navigator} /> 
    } 
    }, 

    _configureScene(route) { 
    return CustomSceneConfig; 
    }, 

    render() { 
    return (
     <Navigator 
     initialRoute={{id: 1, }} 
     renderScene={this._renderScene} 
     configureScene={this._configureScene} /> 
    ); 
    } 
}); 

var styles = StyleSheet.create({ 
    container: { 
    flex: 1, 
    justifyContent: 'center', 
    alignItems: 'center', 
    backgroundColor: '#F5FCFF', 
    }, 
    welcome: { 
    fontSize: 20, 
    textAlign: 'center', 
    margin: 10, 
    color: 'white', 
    }, 
}); 
AppRegistry.registerComponent('SampleApp',() => SampleApp); 
module.exports = SampleApp; 

のように試してみてください

0

あなたはので、多分、状態/小道具に応じて、単一のコンポーネントにこのような何か条件付きレンダリングを行うことができます。

render() { 
    return state.displayComponent? 
    <NewComponent /> : 
    <TouchableOpacity ... onPress={() => this.setState({displayComponent: true})} /> 
} 

をしていますが、より堅牢な何かを探しているなら、react-native-router-flux

をよく読んで
+1

これは恐ろしい解決策です。別の関数を作り、あなたが望む 'onPress'から呼び出すと.... –

+0

私が言ったように、これは強固な解決策ではありません。彼は反応ネイティブで初めて遊んでいて、単一のコンポーネントを持っています。それが私の周りを遊んでいたなら、それは私がやることです。あなたがエンタープライズレベルのソリューションを構築したいなら、私は前述のようにルータを使用し、減速家+アクション、全体の9ヤードを使用します... –

0

touchable opacityの全体の点がそれに触れることです。

Business Logicを別々のclassに置き、Touchable opacityイベントから呼び出します。そして、あなたが望むところであなたのコードでそのロジックを使用してください!

+0

私はtouchable opacityをクリックして別のファイルsecond.android.jsを作成しました。私はsecond.android.jsを開きたい。onPressで書きたいことをどうすればいいのですか? –

+0

@Williams申し訳ありませんが、どういう意味なのか分かりません。もう少し説明できますか? –

関連する問題