React-Native中的导航抽屉

库什布

我是本机的新手,请不要介意我是否想问一个基本问题,我想知道实现导航抽屉的逐步过程是什么。

简称链接此链接

我无法将其集成。

任何实施抽屉的演示项目也将起作用。关于此的任何帮助将是巨大的。

谢谢

BK19

在react native中导航抽屉的实现如下:

index.ios.js

'use strict';

import React, { AppRegistry } from 'react-native';
import App from './components/App';

AppRegistry.registerComponent('ReactNativeProject', () => App);

App.js

'use strict'

import React, { Component } from 'react';
import { DeviceEventEmitter, Navigator, Text, TouchableOpacity, View } from 'react-native';

import Drawer from 'react-native-drawer';
import Icon from 'react-native-vector-icons/MaterialIcons';
import { EventEmitter } from 'fbemitter';

import Menu from './Menu';
import HomePage from './HomePage'
import ProfilePage from './ProfilePage'

import navigationHelper from '../helpers/navigation';

import styles from '../styles/root';

let _emitter = new EventEmitter();

class App extends Component {
    componentDidMount() {
        var self = this;

        _emitter.addListener('openMenu', () => {
            self._drawer.open();
        });

        _emitter.addListener('back', () => {
            self._navigator.pop();
        });
    }

    render() {
        return (
            <Drawer
                ref={(ref) => this._drawer = ref}
                type="overlay"
                content={<Menu navigate={(route) => {
                    this._navigator.push(navigationHelper(route));
                    this._drawer.close()
                }}/>}
                tapToClose={true}
                openDrawerOffset={0.2}
                panCloseMask={0.2}
                closedDrawerOffset={-3}
                styles={{
                    drawer: {shadowColor: '#000000', shadowOpacity: 0.8, shadowRadius: 3},
                    main: {paddingLeft: 3}
                }}
                tweenHandler={(ratio) => ({
                    main: { opacity:(2-ratio)/2 }
                })}>
                <Navigator
                    ref={(ref) => this._navigator = ref}
                    configureScene={(route) => Navigator.SceneConfigs.FloatFromLeft}
                    initialRoute={{
                        id: 'HomePage',
                        title: 'HomePage',
                        index: 0
                    }}
                    renderScene={(route, navigator) => this._renderScene(route, navigator)}
                    navigationBar={
                        <Navigator.NavigationBar
                            style={styles.navBar}
                            routeMapper={NavigationBarRouteMapper} />
                    }
                />
            </Drawer>
        );
    }

    _renderScene(route, navigator) {
        switch (route.id) {
            case 'HomePage':
                return ( <HomePage navigator={navigator}/> );

            case 'ProfilePage':
                return ( <ProfilePage navigator={navigator}/> );
        }
    }
}

const NavigationBarRouteMapper = {
    LeftButton(route, navigator, index, navState) {
        switch (route.id) {
            case 'HomePage':
                return (
                    <TouchableOpacity
                        style={styles.navBarLeftButton}
                        onPress={() => {_emitter.emit('openMenu')}}>
                        <Icon name='menu' size={25} color={'white'} />
                    </TouchableOpacity>
                )
            default:
                return (
                    <TouchableOpacity
                        style={styles.navBarLeftButton}
                        onPress={() => {_emitter.emit('back')}}>
                        <Icon name='chevron-left' size={25} color={'white'} />
                    </TouchableOpacity>
                )
        }
    },

    RightButton(route, navigator, index, navState) {
        return (
            <TouchableOpacity
                style={styles.navBarRightButton}>
                <Icon name='more-vert' size={25} color={'white'} />
            </TouchableOpacity>
        )
    },

    Title(route, navigator, index, navState) {
        return (
            <Text style={[styles.navBarText, styles.navBarTitleText]}>
                {route.title}
            </Text>
        )
    }
}

export default App;

Menu.js

import React, { Component } from 'react';
import { ListView } from 'react-native';

import Button from 'react-native-button';

import styles from '../styles/menu'

var _navigate;
class Menu extends Component {
    constructor(props) {
        super(props);
        this.state = {
            dataSource: new ListView.DataSource({
                rowHasChanged: (row1, row2) => row1 !== row2
            })
        };
        _navigate = this.props.navigate;
    }

    componentDidMount() {
        this.setState({
            dataSource: this.state.dataSource.cloneWithRows(['HomePage', 'ProfilePage'])
        });
    }

    _renderMenuItem(item) {
        return(
            <Button style={styles.menuItem} onPress={()=> this._onItemSelect(item)}>{item}</Button>
        );
    }

    _onItemSelect(item) {
        _navigate(item);
    }

    render() {
        return (
            <ListView
                style={styles.container}
                dataSource={this.state.dataSource}
                renderRow={(item) => this._renderMenuItem(item)}
            />
        );
    }
}

module.exports = Menu;

ProfilePage.js

import React, { Component } from 'react';
import { View, Text } from 'react-native';

import styles from '../styles/home'

class ProfilePage extends Component {
    render(){
        return (
            <View style={styles.container}>
                <Text>Profile Page</Text>
            </View>
        );
    }
}

module.exports = ProfilePage;

HomePage.js

import React, { Component } from 'react';
import { View, Text } from 'react-native';

import styles from '../styles/home'

class HomePage extends Component {
    render(){
        return (
            <View style={styles.container}>
                <Text>Home Page</Text>
            </View>
        );
    }
}

module.exports = HomePage;

navigation.js

import React, { Platform } from 'react-native';
import _ from 'underscore';

module.exports = function (scene) {
    var componentMap = {
        'HomePage': {
            title: 'HomePage',
            id: 'HomePage'
        },
        'ProfilePage': {
            title: 'ProfilePage',
            id: 'ProfilePage'
        }
    }

    return componentMap[scene];
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

React-Native中的导航抽屉

来自分类Dev

React Native中每种用户类型的差异抽屉导航器

来自分类Dev

如何在React Native Android中单击导航抽屉菜单上的2个视图之间的导航?

来自分类Dev

如何在React Native Android中单击导航抽屉菜单上的2个视图之间的导航?

来自分类Dev

带选项卡导航的react-native抽屉导航

来自分类Dev

在使用 asyncstorage 的 React Native 中退出抽屉导航不起作用?

来自分类Dev

React Native 应用程序中类似 Uber 的抽屉式导航

来自分类Dev

React Native-在AppNavigator外部访问抽屉导航

来自分类Dev

如何在React Native中使用抽屉导航器?

来自分类Dev

React-Native-标签导航器嵌套在抽屉内

来自分类Dev

React Native-抽屉导航手势起点

来自分类Dev

React Native-尝试在React导航中创建带有选项卡导航器的抽屉,而不渲染选项卡的Drawer项

来自分类Dev

在React导航5中使用抽屉式导航传递数据/参数

来自分类Dev

如何在 React Native 的抽屉导航中将接收到的数据显示为用户名?

来自分类Dev

在React Native中隐藏导航栏

来自分类Dev

在React Native中在屏幕之间导航

来自分类Dev

React Native:禁用Android抽屉

来自分类Dev

React Native:禁用Android抽屉

来自分类Dev

React导航抽屉V5

来自分类Dev

无法在本机反应中解析@ react-navigation / drawer以创建抽屉导航

来自分类Dev

在React导航v5中突出显示当前活动抽屉菜单

来自分类Dev

React Native - 无法获取已通过导航器(从堆栈导航器到抽屉导航器)传递的参数。接收:对象未定义

来自分类Dev

React Native,导航

来自分类Dev

如何使用React Navigation v.5中的DrawerItemList在抽屉式导航器中传递自定义按钮?

来自分类Dev

在React-Native中从Drawer在Android上引用导航器

来自分类Dev

如何在React Native导航器中禁用向后滑动

来自分类Dev

在React Native中登录屏幕后如何设置导航

来自分类Dev

使导航可用于React Native应用中的所有组件

来自分类Dev

无法在React-native中的SwitchNavigator中导航

Related 相关文章

  1. 1

    React-Native中的导航抽屉

  2. 2

    React Native中每种用户类型的差异抽屉导航器

  3. 3

    如何在React Native Android中单击导航抽屉菜单上的2个视图之间的导航?

  4. 4

    如何在React Native Android中单击导航抽屉菜单上的2个视图之间的导航?

  5. 5

    带选项卡导航的react-native抽屉导航

  6. 6

    在使用 asyncstorage 的 React Native 中退出抽屉导航不起作用?

  7. 7

    React Native 应用程序中类似 Uber 的抽屉式导航

  8. 8

    React Native-在AppNavigator外部访问抽屉导航

  9. 9

    如何在React Native中使用抽屉导航器?

  10. 10

    React-Native-标签导航器嵌套在抽屉内

  11. 11

    React Native-抽屉导航手势起点

  12. 12

    React Native-尝试在React导航中创建带有选项卡导航器的抽屉,而不渲染选项卡的Drawer项

  13. 13

    在React导航5中使用抽屉式导航传递数据/参数

  14. 14

    如何在 React Native 的抽屉导航中将接收到的数据显示为用户名?

  15. 15

    在React Native中隐藏导航栏

  16. 16

    在React Native中在屏幕之间导航

  17. 17

    React Native:禁用Android抽屉

  18. 18

    React Native:禁用Android抽屉

  19. 19

    React导航抽屉V5

  20. 20

    无法在本机反应中解析@ react-navigation / drawer以创建抽屉导航

  21. 21

    在React导航v5中突出显示当前活动抽屉菜单

  22. 22

    React Native - 无法获取已通过导航器(从堆栈导航器到抽屉导航器)传递的参数。接收:对象未定义

  23. 23

    React Native,导航

  24. 24

    如何使用React Navigation v.5中的DrawerItemList在抽屉式导航器中传递自定义按钮?

  25. 25

    在React-Native中从Drawer在Android上引用导航器

  26. 26

    如何在React Native导航器中禁用向后滑动

  27. 27

    在React Native中登录屏幕后如何设置导航

  28. 28

    使导航可用于React Native应用中的所有组件

  29. 29

    无法在React-native中的SwitchNavigator中导航

热门标签

归档