Как запустить другой компонент в React Native

Я изучаю 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 и как запустить следующий компонент при нажатии на это.

Заранее спасибо.


person N Sharma    schedule 24.01.2017    source источник
comment
Что вы имеете в виду под запуском следующего компонента? Вы имеете в виду скрытие и отображение компонента?   -  person Ajackster    schedule 24.01.2017
comment
Это не имеет ничего общего с реакцией родного. Это основное ООП.   -  person Train    schedule 25.01.2017


Ответы (3)


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

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

обратитесь к этой ссылке

person Sport    schedule 24.01.2017

Весь смысл touchable opacity в том, чтобы прикоснуться к нему.

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

person Train    schedule 24.01.2017
comment
Я создал еще один файл second.android.js, теперь при нажатии touchable opacity я хочу открыть second.android.js Как мне сделать, что написать в onPress - person N Sharma; 15.02.2017
comment
@Williams Извините, мне трудно понять, что вы имеете в виду. Можете ли вы объяснить немного больше? - person Train; 15.02.2017

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

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

, но если вы ищете что-то более надежное, прочитайте react-native-router -поток

person Dror Aharon    schedule 24.01.2017
comment
Это ужасное решение. Просто создайте отдельную функцию и вызовите ее из onPress, который вы хотите.... - person Train; 25.01.2017
comment
Как я уже сказал, это не надежное решение. Он впервые экспериментирует с React Native, и у него всего один компонент. Если бы это был я, играющий вокруг, я бы так и сделал. Если вы хотите создать решение корпоративного уровня, я бы использовал маршрутизатор, как уже упоминалось, редукторы + действия, все 9 ярдов... - person Dror Aharon; 26.01.2017