侧边栏菜单是网页和移动应用程序的用户界面的一个伟大功能。侧边栏菜单不仅能增加应用程序的功能,还能通过使导航变得简单来改善整体的用户体验
在本教程中,我们将学习如何在React中从头开始制作一个惊人的侧边栏菜单。让我们开始吧!
首先,确保你的本地机器上安装了 最新版本的Node.js 。运行以下命令,在你的目录中设置一个React项目。
Npx create-react-app my-app
目前,我们的文件夹结构看起来像下面的图片。
让我们删除一些不必要的文件,使我们的src
文件夹看起来像下面的图片。
目前,App.css
没有样式,但我们稍后会添加这些样式我们的App.js
和index.js
文件分别看起来像下面两个代码块。
import './App.css';
function App() {
return (
<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
你应该收到以下输出。
创建一个侧边栏菜单
为了创建一个侧边栏菜单,我们必须安装以下库。
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.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>
{SidebarData.map((item, index) => {
return (
<li key={index} className={item.cName}>
<Link to={item.path}>
{item.icon}
<span>{item.title}</span>
</Link>
</nav>
export default Navbar;
在上面的代码块中,我们使用map
函数来创建边栏元素,使用SideBarData.js
中的数据。
state
变量和条件检查允许我们在显示和隐藏我们的侧边栏之间切换。目前,由于我们还没有添加任何CSS,所以切换功能并不工作。输出结果将如下图所示。
创建一个名为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-menu
和nav-menu.active
类中,我们分别添加代码来显示和隐藏侧边栏。我们将nav-menu.active
中的left
属性设置为100px
,这将隐藏侧边栏的菜单。当我们的状态改变时,该类被设置为nav-menu.active
,将left
属性改为0
,并显示侧边栏菜单。
现在,保存这些变化,你会收到以下输出。
当悬停时,我们会看到一个白色的背景。
最后,我们需要将我们的项目链接到它们的特定页面。
让我们创建一个新的文件夹,并将其命名为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;
最终的文件结构看起来如下图所示。
在上面的图片中,所代表的页面是使用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;
如果你点击任何一个侧边栏的菜单项,你将被引导到其各自的页面,如下面的截图所示。
让我们为我们的样式添加一些最后的润色吧!在我们的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.