使用 react-native 抽屉实现侧边栏/汉堡菜单

Posted

技术标签:

【中文标题】使用 react-native 抽屉实现侧边栏/汉堡菜单【英文标题】:implementing sideBar/hamburger menu with react-native drawer 【发布时间】:2017-08-02 11:49:12 【问题描述】:

我对 React-Native 还是很陌生。 我正在尝试通过实现“反应原生抽屉”组件将侧边栏/汉堡菜单添加到我的应用程序中。首先,我试图将 GitHub 中的示例代码添加到我的新测试项目中,以了解它是如何工作的。我面对屏幕上的错误。

如果我得到一些帮助,那会让我非常高兴。或者你能告诉我更简单的方法来为我的项目实现侧边栏/汉堡菜单。

import Drawer from 'react-native-drawer';
import React, Component from 'react';
import SideBarContent from '../common/SideBarContent';
import Text,View from 'react-native';

class SideBar extends Component

    closeControlPanel = () => 
        this._drawer.close()
    ;
    openControlPanel = () => 
        this._drawer.open()
    ;

    render()
    
        const drawerStyles = 
            drawer:  shadowColor: '#000000', shadowOpacity: 0.8, shadowRadius: 3,
            main: paddingLeft: 3,
        


        return (
            <Drawer
                type="static"
                content=<SideBarContent/>
                openDrawerOffset=100
                styles=drawerStyles
                tweenHandler=Drawer.tweenPresets.parallax
            >
                <View><Text>Drawer</Text></View>
            </Drawer>
        );
    

这是我的 SideBarContent 组件。

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


class SideBarContent extends Component
    render()
    
        return(
            <View>
                <Text>Order History</Text>
                <Text>Account</Text>
                <Text>Basket</Text>
                <Text>About us</Text>
            </View>
        );
    

【问题讨论】:

&lt;ControlPanel/&gt;&lt;MainView/&gt; 元素是不属于 React Native 库的自定义元素。您可以用您自己的内容替换它们,例如。 &lt;div&gt;ControlPanel&lt;/div&gt; 看看它的样子 【参考方案1】:

由于我不在系统上,所以没有检查代码的工作情况,但这应该可以工作。

import Drawer from 'react-native-drawer';
import React, Component from 'react';
import SideBarContent from '../common/SideBarContent';
import Text,View from 'react-native';

export default class SideBar extends Component

    constructor()
        super();
        this.closeControlPanel = this.closeControlPanel.bind(this);
        this.openControlPanel = this.openControlPanel.bind(this);
    

    closeControlPanel = () => 
        this._drawer.close()
    ;
    openControlPanel = () => 
        this._drawer.open()
    ;

    render()
    
        const drawerStyles = 
            drawer:  shadowColor: '#000000', shadowOpacity: 0.8, shadowRadius: 3,
            main: paddingLeft: 3,
        

        return (
            <Drawer
                type="static"
                content=<SideBarContent />
                ref = (ref) => this._drawer = ref
                openDrawerOffset=100
                styles=drawerStyles
                tweenHandler=Drawer.tweenPresets.parallax
            >
                <View>
                <Text onPress=this.openControlPanel>
                    Drawer
                </Text>
                </View>
            </Drawer>
        );
    

另一个文件 SideBarContent

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


    export default class SideBarContent extends Component
        constructor() 
            super();
        
        render()
        
            return(
                <View>
                    <Text>Order History</Text>
                    <Text>Account</Text>
                    <Text>Basket</Text>
                    <Text>About us</Text>
                </View>
            );
        
    

如果有任何问题请告诉我..

【讨论】:

谢谢伙计,这应该可行。他忘记添加导出默认值,将引用添加到抽屉中。【参考方案2】:

&lt;MainView /&gt; 本质上是您将在汉堡菜单之前显示的屏幕。

&lt;ControlPanel /&gt; 是用户单击汉堡菜单后将显示的侧视图。换句话说,它是实际的侧菜单。

&lt;Drawer /&gt; 控制这些视图、动画、抽屉/侧视图/侧菜单的其他功能的打开/关闭(无论您想如何称呼它)。

您仍然需要创建这些视图。我会帮你展示一个我的应用程序的例子。

我的&lt;MainView/&gt; 是下面这个屏幕:

我的&lt;ControlPanel /&gt; 是这个:

我也使用您尝试使用的同一个库。

希望这会有所帮助。

【讨论】:

非常感谢。它几乎让我明白了一切。我为“内容”而不是 ControlPanel 创建了新组件,并用简单的“视图”组件更改了 MainView,只是为了查看汉堡菜单及其内容。我用当前的代码编辑了我的代码,所以你可以看到。但是,现在,我收到“检查默认渲染器的渲染方法”错误,我也将其筛选并添加到问题中,因此您可以看到。你知道我做错了什么吗?在谷歌上搜索后我无法获得。 让我帮你查一下。 我还添加了用于“内容”的“SideBarContent”组件代码。我不知道,也许我在那里做错了什么。 我的猜测是您从方括号内的 react native 导入了视图,当您在抽屉内使用它时,代码被破坏了。我必须看这里,但无论如何尝试使用简单视图创建一个组件并导入它,或者尝试在导入的括号外导入视图。我不知道它是否会起作用,但如果不起作用,我可以稍后再找你。 哦,是的,你忘了导出 SideBarContent 类。每次创建外部组件时,都应在开头添加:export default。例如。导出默认类 SideBarContent ...

以上是关于使用 react-native 抽屉实现侧边栏/汉堡菜单的主要内容,如果未能解决你的问题,请参考以下文章

如何使用反应原生导航 v2 添加侧边栏抽屉?

xamarin 形式的侧边栏抽屉

VueJS + Vuex + Vuetify 导航抽屉

导航抽屉在 Android Studio 中不起作用

开源一个简单的react-native 菜单栏抽屉组件,带缩放效果

Flutter之抽屉组件drawer,设置drawer宽度——Flutter基础系列