2017-01-24 4 views
0

Я изучаю react-native программирование, где у меня есть один компонент в index.android.js. У меня есть 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

Это не имеет никакого отношения к реакции на родной. Это основной ООП. –

ответ

0

Попробуйте как этот

'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; 

передать этот link

0

Вы можете сделать условную визуализацию в одном компоненте в зависимости от состояния/реквизита, так что, может быть, что-то вроде этого:

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

, но если вы ищете что-то более надежное, читать на react-native-router-flux

+1

Это ужасное решение. Просто сделайте отдельную функцию и вызовите ее из 'onPress', которую вы хотите .... –

+0

Как я уже сказал, это не надежное решение. Он впервые играет с реакцией, и имеет один компонент. Если бы я играл, это то, что я сделал бы. Если вы хотите создать решение на уровне предприятия, я бы использовал маршрутизатор, как упоминалось, редукторы redux + действия, целые 9 ярдов ... –

0

Весь смысл touchable opacity - это прикоснуться к нему.

Поместите свой Business Logic в отдельный class и вызовите его из события Touchable opacity. Затем используйте эту логику в своем коде, где бы вы ни захотели!

+0

Я создал еще один файл second.android.js сейчас, нажав кнопку «touchable opacity» Я хочу открыть second.android.js. Как я могу сделать, что писать в onPress –

+0

@Williams Извините, мне трудно понять, что вы имеете в виду. Можете ли вы объяснить немного больше? –

Смежные вопросы