如何在React中从头开始创建一个侧边栏菜单-教程篇

3,286 阅读5分钟

侧边栏菜单是网页和移动应用程序的用户界面的一个伟大功能。侧边栏菜单不仅能增加应用程序的功能,还能通过使导航变得简单来改善整体的用户体验

在本教程中,我们将学习如何在React中从头开始制作一个惊人的侧边栏菜单。让我们开始吧!

设置项目

首先,确保你的本地机器上安装了最新版本的Node.js。运行以下命令,在你的目录中设置一个React项目。

Npx create-react-app my-app

目前,我们的文件夹结构看起来像下面的图片。

New React Project Folder Setup

让我们删除一些不必要的文件,使我们的src 文件夹看起来像下面的图片。

Src Folder Updated Setup

目前,App.css 没有样式,但我们稍后会添加这些样式我们的App.jsindex.js 文件分别看起来像下面两个代码块。

import './App.css';

function App() {
  return (
    <div>
      <p>React App</p>
    </div>
  );
}

export default App;


import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';

ReactDOM.render(
  <React.StrictMode>
    <App />
  </React.StrictMode>,
  document.getElementById('root')
);

现在,让我们用以下命令运行我们的React应用程序。

yarn start

你应该收到以下输出。

Run React App Yarn Start Output

创建一个侧边栏菜单

为了创建一个侧边栏菜单,我们必须安装以下库。

npm install react-icons react-router-dom --save

让我们创建一个名为components.js 的新文件夹。在里面,我们将创建一个名为SideMenuData.js 的文件。

React Icons库提供了用于创建漂亮的个性化界面的元素。在SideMenuData.js ,我们将添加以下JavaScript对象,我们将用React Icons的元素来填充我们的侧边菜单。

import React from 'react';
import * as FaIcons from 'react-icons/fa';
import * as AiIcons from 'react-icons/ai';
import * as IoIcons from 'react-icons/io';

export const SidebarData = [
  {
    title: 'Home',
    path: '/',
    icon: <AiIcons.AiFillHome />,
    cName: 'nav-text'
  },
  {
    title: 'Reports',
    path: '/reports',
    icon: <IoIcons.IoIosPaper />,
    cName: 'nav-text'
  },
  {
    title: 'Products',
    path: '/products',
    icon: <FaIcons.FaCartPlus />,
    cName: 'nav-text'
  },
];

现在我们已经准备好了我们的数据,让我们创建一个名为Navbar.js 的文件夹。确保在App.js 中导入Navbar.js 。在Navbar.js 中添加以下代码。

import React, { useState } from 'react';
import * as FaIcons from 'react-icons/fa';
import { Link } from 'react-router-dom';

function Navbar() {
  const [sidebar, setSidebar] = useState(false);

  const showSidebar = () => setSidebar(!sidebar);

  return (
    <>
        <div className='navbar'>
          <Link to='#' className='menu-bars'>
            <FaIcons.FaBars onClick={showSidebar} />
          </Link>
        </div>
    </>
  );
}

export default Navbar;

我们将得到以下输出。

Navbar Code Output Sidebar Menu

目前,在我们的侧边栏菜单中没有出现任何东西,因为我们还没有添加侧边栏的状态!让我们在Navbar.js 文件夹中为我们的侧边栏菜单添加代码。

import React, { useState } from 'react';
import * as FaIcons from 'react-icons/fa';
import * as AiIcons from 'react-icons/ai';
import { Link } from 'react-router-dom';
import { SidebarData } from './SideBarData';

function Navbar() {
  const [sidebar, setSidebar] = useState(false);

  const showSidebar = () => setSidebar(!sidebar);

  return (
    <>
        <div className='navbar'>
          <Link to='#' className='menu-bars'>
            <FaIcons.FaBars onClick={showSidebar} />
          </Link>
        </div>
        <nav className={sidebar ? 'nav-menu active' : 'nav-menu'}>
          <ul className='nav-menu-items' onClick={showSidebar}>
            <li className='navbar-toggle'>
              <Link to='#' className='menu-bars'>
                <AiIcons.AiOutlineClose />
              </Link>
            </li>
            {SidebarData.map((item, index) => {
              return (
                <li key={index} className={item.cName}>
                  <Link to={item.path}>
                    {item.icon}
                    <span>{item.title}</span>
                  </Link>
                </li>
              );
            })}
          </ul>
        </nav>
    </>
  );
}

export default Navbar;

在上面的代码块中,我们使用map 函数来创建边栏元素,使用SideBarData.js 中的数据。

state 变量和条件检查允许我们在显示和隐藏我们的侧边栏之间切换。目前,由于我们还没有添加任何CSS,所以切换功能并不工作。输出结果将如下图所示。

Sidebar Elements Created Output

添加样式

创建一个名为Navbar.css 的新文件,并将其存放在components.js 目录中。让我们向它添加以下样式。

.navbar {
  background-color: rgb(183, 247, 181);
  height: 80px;
  display: flex;
  justify-content: start;
  align-items: center;
}

.menu-bars {
  margin-left: 2rem;
  font-size: 2rem;
  background: none;
}

.nav-menu {
  background-color: rgb(183, 247, 181);
  width: 250px;
  height: 100vh;
  display: flex;
  justify-content: center;
  position: fixed;
  top: 0;
  left: -100%;
  transition: 850ms;
}

.nav-menu.active {
  left: 0;
  transition: 350ms;
}

.nav-text {
  display: flex;
  justify-content: start;
  align-items: center;
  padding: 8px 0px 8px 16px;
  list-style: none;
  height: 60px;
}

.nav-text a {
  text-decoration: none;
  color: black;
  font-size: 18px;
  width: 95%;
  height: 100%;
  display: flex;
  align-items: center;
  padding: 0 16px;
  border-radius: 4px;
}

.nav-text a:hover {
  background-color: #ffffff;
}

.nav-menu-items {
  width: 100%;
}

.navbar-toggle {
  background-color: rgb(183, 247, 181);
  width: 100%;
  height: 80px;
  display: flex;
  justify-content: start;
  align-items: center;
}

span {
  margin-left: 16px;
}

nav-menunav-menu.active 类中,我们分别添加代码来显示和隐藏侧边栏。我们将nav-menu.active 中的left 属性设置为100px ,这将隐藏侧边栏的菜单。当我们的状态改变时,该类被设置为nav-menu.active ,将left 属性改为0 ,并显示侧边栏菜单。

现在,保存这些变化,你会收到以下输出。

Show Hide Sidebar Code Output

当悬停时,我们会看到一个白色的背景。

Hover Above Sidebar Display

最后,我们需要将我们的项目链接到它们的特定页面。

添加导航

让我们创建一个新的文件夹,并将其命名为pages 。我们将创建并添加以下新文件到其中。

Home.js 指引用户到主页。

import React from 'react';

function Home() {
  return (
    <div className='home'>
      <h1>Home</h1>
    </div>
  );
}

export default Home;

Products.js 指引用户到产品页面。

import React from 'react';

function Products() {
  return (
    <div className='products'>
      <h1>Products</h1>
    </div>
  );
}

export default Products;

Reports.js 引导用户进入报告页面。

import React from 'react';

function Reports() {
  return (
    <div className='reports'>
      <h1>Reports</h1>
    </div>
  );
}

export default Reports;

最终的文件结构看起来如下图所示。

Final React App File Structure

在上面的图片中,所代表的页面是使用react-navigation 库添加导航所需的React组件。一切都在root 组件中完成。

接下来,让我们去我们的App.js 文件夹,导入以下代码。

import { BrowserRouter as Router, Switch, Route } from 'react-router-dom';
import Home from './pages/Home';
import Reports from './pages/Reports';
import Products from './pages/Products';

BrowserRouter 是所有路由的高级组件。Switch 包裹了子路由,以实现应用程序周围的导航。现在,我们有了最终的App.js 文件。

import React from 'react';
import './App.css';
import Navbar from './components/Navbar';
import { BrowserRouter as Router, Switch, Route } from 'react-router-dom';
import Home from './pages/Home';
import Reports from './pages/Reports';
import Products from './pages/Products';

function App() {
  return (
    <>
      <Router>
        <Navbar />
        <Switch>
          <Route path='/' exact component={Home} />
          <Route path='/reports' component={Reports} />
          <Route path='/products' component={Products} />
        </Switch>
      </Router>
    </>
  );
}

export default App;

如果你点击任何一个侧边栏的菜单项,你将被引导到其各自的页面,如下面的截图所示。

Sidebar Menu Products Page

让我们为我们的样式添加一些最后的润色吧!在我们的App.css 文件中添加以下代码。

* {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}

.home,
.reports,
.products {
  display: flex;
  height: 90vh;
  align-items: center;
  justify-content: center;
  font-size: 3rem;
}

Voila!你已经成功地在React中从头开始创建了一个漂亮的侧边栏菜单。

总结

在本教程中,我们学习了如何在React中从头开始建立一个侧边栏组件。如果你想改善你的React应用程序的用户界面,本教程中的信息是有用的。你应该自由地定制这种方法,使其最适合你的需要。

我希望你喜欢这个教程

The postCreate a sidebar menu in React from scratchappeared first onLogRocket Blog.