首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ionic 4 React汉堡菜单

Ionic 4 React汉堡菜单
EN

Stack Overflow用户
提问于 2020-10-14 00:00:47
回答 1查看 492关注 0票数 1

我在执行离子4汉堡菜单时遇到了困难。我将菜单放在单独的组件中,如下所示:

代码语言:javascript
复制
import React from "react";
import {
  IonMenu,
  IonHeader,
  IonToolbar,
  IonTitle,
  IonContent,
  IonList,
  IonItem,
  IonButtons,
  IonMenuButton,
  IonIcon,
} from "@ionic/react";
import { menuController } from "@ionic/core";
import { menuOutline } from "ionicons/icons";

const Menu: React.FC = () =>
{
  const onClickHandler = (): void =>
  {
    menuController.open();
  };

  return (
    <React.Fragment>
      <IonMenu side="start" menuId="first" content-id="main">
        <IonHeader translucent>
          <IonToolbar color="primary">
            <IonTitle>
              <IonIcon slot="start" icon={menuOutline}></IonIcon>
            </IonTitle>
            <IonButtons slot="start">
              <IonMenuButton autoHide={false}
                             onClick={() => onClickHandler()}>
              </IonMenuButton>
            </IonButtons>
          </IonToolbar>
        </IonHeader>
        <IonContent>
          <IonList>
            <IonItem>Menu Item</IonItem>
            <IonItem>Menu Item</IonItem>
            <IonItem>Menu Item</IonItem>
            <IonItem>Menu Item</IonItem>
            <IonItem>Menu Item</IonItem>
          </IonList>
        </IonContent>
      </IonMenu>
    </React.Fragment>
  );
};

export default Menu;

然后我试着在我的App.tsx中使用它

代码语言:javascript
复制
mport React from "react";
import { Redirect, Route } from "react-router-dom";
import { IonApp, IonRouterOutlet } from "@ionic/react";
import { IonReactRouter } from "@ionic/react-router";

import Home from "./pages/home/home";
import { ProtectedRoute } from "./security/protectedRoute";
import AdminHome from "./pages/admin/adminHome";
import Menu from "./pages/shared/menu/menu";

/* Core CSS required for Ionic components to work properly */
import "@ionic/react/css/core.css";

/* Basic CSS for apps built with Ionic */
import "@ionic/react/css/normalize.css";
import "@ionic/react/css/structure.css";
import "@ionic/react/css/typography.css";

/* Optional CSS utils that can be commented out */
import "@ionic/react/css/padding.css";
import "@ionic/react/css/float-elements.css";
import "@ionic/react/css/text-alignment.css";
import "@ionic/react/css/text-transformation.css";
import "@ionic/react/css/flex-utils.css";
import "@ionic/react/css/display.css";

/* Theme variables */
import "./theme/variables.css";

const App: React.FC = () => (
  <IonApp>
    <Menu />
    <IonReactRouter>
      <IonRouterOutlet>
        <Route path="/home" component={Home} exact={true} />
        <Route exact path="/" render={() => <Redirect to="/home" />} />

        <ProtectedRoute path="/admin" component={AdminHome} />
      </IonRouterOutlet>
    </IonReactRouter>
  </IonApp>
);

export default App;

我也试着把页眉组件放在首页内容部分,但它从来没有出现过。

EN

回答 1

Stack Overflow用户

发布于 2020-10-14 04:56:17

在花了更多的时间在官方文档网站上之后,我知道了如何显示汉堡菜单的按钮,以及如何显示/隐藏菜单,或者通过滑动获取菜单。

App.tsx

代码语言:javascript
复制
import React from "react";
import { Redirect, Route } from "react-router-dom";
import { IonApp, IonRouterOutlet, IonSplitPane } from "@ionic/react";
import { IonReactRouter } from "@ionic/react-router";

import Home from "./pages/home/home";
import { ProtectedRoute } from "./security/protectedRoute";
import AdminHome from "./pages/admin/adminHome";
import Menu from "./pages/shared/menu/menu";

/* Core CSS required for Ionic components to work properly */
import "@ionic/react/css/core.css";

/* Basic CSS for apps built with Ionic */
import "@ionic/react/css/normalize.css";
import "@ionic/react/css/structure.css";
import "@ionic/react/css/typography.css";

/* Optional CSS utils that can be commented out */
import "@ionic/react/css/padding.css";
import "@ionic/react/css/float-elements.css";
import "@ionic/react/css/text-alignment.css";
import "@ionic/react/css/text-transformation.css";
import "@ionic/react/css/flex-utils.css";
import "@ionic/react/css/display.css";

/* Theme variables */
import "./theme/variables.css";

const App: React.FC = () => (
  <IonApp>
    <IonReactRouter>
        <Menu />
        <IonRouterOutlet id="menuContent">
          <Route path="/home" component={Home} exact={true} />
          <Route exact path="/" render={() => <Redirect to="/home" />} />

          <ProtectedRoute path="/admin" component={AdminHome} />
        </IonRouterOutlet>
    </IonReactRouter>
  </IonApp>
);

export default App;

menu.tsx

代码语言:javascript
复制
import React from "react";
import {
  IonMenu,
  IonHeader,
  IonToolbar,
  IonTitle,
  IonContent,
  IonList,
  IonItem,
  IonButtons,
  IonMenuButton,
  IonIcon,
} from "@ionic/react";
import { menuController } from "@ionic/core";
import { menuOutline } from "ionicons/icons";

const Menu: React.FC = () =>
{

  const onClickHandler = (): void =>
  {
    menuController.close();
  };

  return (
    <React.Fragment>
      <IonMenu
        side="start"
        menuId="first"
        content-id="menuContent"
        swipe-gesture={true}
        disabled={false}
        maxEdgeStart={100}
        hidden={false}
        type="overlay">
        <IonHeader translucent>
          <IonToolbar color="primary">
            <IonTitle>
              <IonIcon slot="start" icon={menuOutline}></IonIcon>
            </IonTitle>
            <IonButtons slot="start">
              <IonMenuButton
                autoHide={true}
                onClick={() => onClickHandler()}
              ></IonMenuButton>
            </IonButtons>
          </IonToolbar>
        </IonHeader>
        <IonContent>
          <IonList>
            <IonItem>Menu Item</IonItem>
            <IonItem>Menu Item</IonItem>
            <IonItem>Menu Item</IonItem>
            <IonItem>Menu Item</IonItem>
            <IonItem>Menu Item</IonItem>
          </IonList>
        </IonContent>
      </IonMenu>
    </React.Fragment>
  );
};

export default Menu;

在页眉上,在IonToolbar标签后面添加您喜欢的图标:

代码语言:javascript
复制
<IonIcon slot="start" icon={menuOutline}
                   onClick={() => onClickHandler()}
                   size="large">

和事件处理程序

代码语言:javascript
复制
  const onClickHandler = () =>
  {
    menuController.open()
  }

此外,还需要导入菜单控件

代码语言:javascript
复制
import { menuController } from "@ionic/core";
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64338899

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档