реагировать родной: как создать боковое меню с навигацией между представлениями с помощью DrawerLayoutAndroid

Я новичок в React Native и пытаюсь создать боковое меню с навигацией с помощью DrawerLayoutAndroid. Я просмотрел это, но не нашел ничего полезного. Вот что у меня есть на данный момент:

'use strict';

var React = require('react-native');
var {
  AppRegistry,
  DrawerLayoutAndroid,
  StyleSheet,
  TouchableHighlight,
  Text,
  Navigator,
  View,
  Image
} = React;
var ContentView = React.createClass({
  render() {
    return(
      <View>
        <Text style={styles.contentStyle}>Hello</Text>
      </View>
      );
  }
});
var Test = React.createClass({
  openD() {
    this.refs['DRAWER'].openDrawer();
  },
  render() {
    var navigationView = (
      <View style={styles.contentStyle}>
        <Text>First View</Text>
        <Text>Second View</Text>
        <Text>Third View</Text>
      </View>
    );

    return (
      <DrawerLayoutAndroid
        drawerWidth={300}
        drawerPosition={DrawerLayoutAndroid.positions.Left}
        ref={'DRAWER'}
        renderNavigationView={() => navigationView}>
        <View style={{flex: 1, backgroundColor: 'white'}}>
          <TouchableHighlight onPress={this.openD} underlayColor='transparent'>
            <Image 
            source={{uri:'https://cdn4.iconfinder.com/data/icons/wirecons-free-vector-icons/32/menu-alt-512.png'}} 
            style={styles.img}/>
          </TouchableHighlight>
          <ContentView/>
        </View>
      </DrawerLayoutAndroid>
    );
  }
});

И как это выглядит: главный вид

Ящик

Я прошу простой пример добавления навигации в этот код, чтобы он мог переключаться между представлениями. Заранее спасибо и извините за такие нубские вопросы.


person Christine H.    schedule 24.06.2016    source источник
comment
Вы можете просто пойти сюда, чтобы получить полный пример того, что вы хотите... -react-native-app/38189572#38189572">Ящик со значком гамбургера на панели инструментов   -  person Riten    schedule 04.07.2016
comment
Если возникнут какие-либо проблемы, спросите меня...: D   -  person Riten    schedule 04.07.2016


Ответы (1)


Вам просто нужно немного изменить свой код, чтобы визуализировать сам компонент Navigator и поместить то, что у вас уже есть, в его метод renderScene. Это должно быть что-то вроде этого:

'use strict';

var React = require('react-native');
var {
  AppRegistry,
  DrawerLayoutAndroid,
  StyleSheet,
  TouchableHighlight,
  Text,
  Navigator,
  View,
  Image
} = React;
var ContentView = React.createClass({
  render() {
    return(
      <View>
        <Text style={styles.contentStyle}>Hello</Text>
      </View>
      );
  }
});
var Test = React.createClass({
  openD() {
    this.refs['DRAWER'].openDrawer();
  },
  renderScene = (route, navigator) => {
    var navigationView = (
      //Here you can pass the navigator objects to your views to push/pop them and navigate
      <View style={styles.contentStyle}>
        <Text>First View</Text>
        <Text>Second View</Text>
        <Text>Third View</Text>
      </View>
    );

    return (
      <DrawerLayoutAndroid
        drawerWidth={300}
        drawerPosition={DrawerLayoutAndroid.positions.Left}
        ref={'DRAWER'}
        renderNavigationView={() => navigationView}>
        <View style={{flex: 1, backgroundColor: 'white'}}>
          <TouchableHighlight onPress={this.openD} underlayColor='transparent'>
            <Image 
            source={{uri:'https://cdn4.iconfinder.com/data/icons/wirecons-free-vector-icons/32/menu-alt-512.png'}} 
            style={styles.img}/>
          </TouchableHighlight>
          <ContentView/>
        </View>
      </DrawerLayoutAndroid>
    );
  }

  render() {
    return (
    <Navigator
      renderScene={this.renderScene}
    />
  )}
});
person Jeremy Colin    schedule 25.06.2016
comment
извините, что снова беспокою вас, но мне нужна дополнительная помощь. Во-первых, этот код не позволяет мне получить доступ к функции openD(), говоря, что undefined не является функцией, что часто происходит, когда я пытаюсь вызвать что-то, используя this вне функции render(). А во-вторых, у меня какие-то реальные проблемы с Навигатором, поэтому я и открыл этот вопрос. Мне нужен простой, но работающий пример доступа к различным представлениям с помощью Drawer. Я был бы очень признателен, если бы вы могли мне помочь. :) - person Christine H.; 25.06.2016
comment
1. Я обновил свой ответ, чтобы использовать функцию стрелки, чтобы иметь возможность использовать эту и вашу функцию. 2. Прочитайте эти хорошо сделанные руководства: medium.com/@dabit3/ blog.paracode.com/2016/01/05/ И в дополнение к коду, который я вам дал, у вас должно быть все, что вам нужно. - person Jeremy Colin; 26.06.2016
comment
Я понимаю, что вам это кажется легким, но причина открытия этого вопроса заключалась в том, что для меня это было нелегко. Я понимаю, ЧТО делать, но не понимаю, КАК это делать, поэтому и просил простой пример. Я уже знаю все, что вы сказали до сих пор. Я просто не знаю, как это использовать в моем случае. - person Christine H.; 29.06.2016