【问题标题】:react native: How do I create a side menu with navigation between views using DrawerLayoutAndroidreact native:如何使用 DrawerLayoutAndroid 在视图之间创建带有导航的侧边菜单
【发布时间】:2016-06-24 15:18:59
【问题描述】:

我是 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>
    );
  }
});

它是什么样子的: Main View

Drawer

我要求一个简单的示例,向此代码添加导航,以便它可以在视图之间切换。在此先感谢并为这些菜鸟问题感到抱歉。

【问题讨论】:

标签: android react-native navigation-drawer react-router drawerlayout


【解决方案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}
    />
  )}
});

【讨论】:

  • 真的很抱歉再次打扰您,但我需要更多帮助。首先,这段代码不允许我访问 openD() 函数,说“未定义不是函数”,这经常发生在我尝试在 render() 函数之外使用“this”调用某些东西时。其次,我对 Navigator 有一些实际问题,这就是我提出这个问题的原因。我需要一个简单但有效的示例来使用 Drawer 访问不同的视图。如果您能帮助我,我将不胜感激。 :)
  • 1.我更新了我的答案以使用箭头功能,以便能够使用此功能和您的功能。 2. 阅读那些制作精良的教程:medium.com/@dabit3/…blog.paracode.com/2016/01/05/… 除了我给你的代码,你应该有你需要的一切。
  • 我明白这对您来说似乎很容易,但提出这个问题的原因是这对我来说并不容易。我知道该怎么做,但我不明白怎么做,这就是为什么我一直在要求一个简单的例子。到目前为止,我已经知道你所说的一切。我只是不知道如何在我的情况下使用它。
猜你喜欢
  • 2017-10-07
  • 1970-01-01
  • 2014-03-13
  • 2017-10-22
  • 2019-03-24
  • 2021-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多