热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何在ReactJS中创建带有下拉菜单的响应侧边栏?

如何在ReactJS中创建带有下拉菜单的响应侧边栏?原文:h

如何在 ReactJS 中创建带有下拉菜单的响应侧边栏?

原文:https://www . geeksforgeeks . org/如何创建带有下拉菜单的响应侧边栏-in-reactjs/

侧边栏是网站设计的一个重要元素,因为它允许用户快速访问网站中的任何部分。

项目一瞥:

先决条件:


  1. 国家预防机制

  2. 创建-反应-应用

  3. react-路由器-dom

  4. 使用状态反应挂钩

基本设置:您将使用 创建-反应-app 开始一个新项目,因此打开您的终端并键入:

npx create-react-app react-sidebar-dropdown

现在,通过在终端中键入给定的命令,转到您的反应-侧栏-下拉菜单文件夹:

cd react-sidebar-dropdown

所需模块:通过在终端中键入给定的命令,安装本项目所需的依赖项。

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

现在在 src 中创建组件文件夹,然后转到组件文件夹,创建三个文件侧边栏. js侧边栏. js子菜单. js

在 src 中再创建一个名为 pages 的文件夹,在 pages 中再创建一个名为 AboutUs.jsContactUs.jsEvents.jsServices.jsSupport.js 的文件。

项目结构:项目中的文件结构会是这样的。

Filename- Sidebar.js: 打开&关闭侧边栏视图,这就是useState()hook 发挥作用的地方。

我们创建一个状态,第一个元素侧边栏作为初始状态,值为 false,第二个元素作为函数设置侧边栏()来更新状态。然后创建一个名为show 侧栏()的函数,每当调用侧栏时,该函数将侧栏的值设置为与其当前值相反。

该功能是借助【onClick()功能与菜单栏图标和十字图标配合使用。当我们点击栏图标查看侧导航链接时,它将状态值设置为 true,显示侧边栏,并出现一个十字图标来代替栏图标。当我们想要关闭侧边栏时,我们只需点击十字图标,它就会在关闭侧边栏后被替换为条形图标,因为现在状态的值被设置为 false。

java 描述语言

import React, { useState } from "react";
import styled from "styled-components";
import { Link } from "react-router-dom";
import * as FaIcons from "react-icons/fa";
import * as AiIcons from "react-icons/ai";
import { SidebarData } from "./SidebarData";
import SubMenu from "./SubMenu";
import { IconContext } from "react-icons/lib";
const Nav = styled.div`
  background: #15171c;
  height: 80px;
  display: flex;
  justify-content: flex-start;
  align-items: center;
`;
const NavIcon = styled(Link)`
  margin-left: 2rem;
  font-size: 2rem;
  height: 80px;
  display: flex;
  justify-content: flex-start;
  align-items: center;
`;
const SidebarNav = styled.nav`
  background: #15171c;
  width: 250px;
  height: 100vh;
  display: flex;
  justify-content: center;
  position: fixed;
  top: 0;
  left: ${({ sidebar }) => (sidebar ? "0" : "-100%")};
  transition: 350ms;
  z-index: 10;
`;
const SidebarWrap = styled.div`
  width: 100%;
`;
const Sidebar = () => {
  const [sidebar, setSidebar] = useState(false);
  const showSidebar = () => setSidebar(!sidebar);
  return (
    <>
      
        


        
          
            
              
            

            {SidebarData.map((item, index) => {
              return ;
            })}
          

        

      
    
  );
};
export default Sidebar;

文件名- SidebarData.js :

java 描述语言

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";
import * as RiIcons from "react-icons/ri";
export const SidebarData = [
  {
    title: "About Us",
    path: "/about-us",
    icon: ,
    iconClosed: ,
    iconOpened: ,
    subNav: [
      {
        title: "Our Aim",
        path: "/about-us/aim",
        icon: ,
      },
      {
        title: "Our Vision",
        path: "/about-us/vision",
        icon: ,
      },
    ],
  },
  {
    title: "Services",
    path: "/services",
    icon: ,
    iconClosed: ,
    iconOpened: ,
    subNav: [
      {
        title: "Service 1",
        path: "/services/services1",
        icon: ,
        cName: "sub-nav",
      },
      {
        title: "Service 2",
        path: "/services/services2",
        icon: ,
        cName: "sub-nav",
      },
      {
        title: "Service 3",
        path: "/services/services3",
        icon: ,
      },
    ],
  },
  {
    title: "Contact",
    path: "/contact",
    icon: ,
  },
  {
    title: "Events",
    path: "/events",
    icon: ,
    iconClosed: ,
    iconOpened: ,
    subNav: [
      {
        title: "Event 1",
        path: "/events/events1",
        icon: ,
      },
      {
        title: "Event 2",
        path: "/events/events2",
        icon: ,
      },
    ],
  },
  {
    title: "Support",
    path: "/support",
    icon: ,
  },
];

文件名-子菜单. js: 下拉链接的逻辑再次使用useState()钩子完成。

我们创建一个状态,第一个元素 subnav 作为初始状态,值为 false,第二个元素作为函数 setSubnav() 来更新状态。然后创建一个名为 showSubnav() 的函数,每当调用该函数时,它都会将 Subnav 的值设置为与其当前值相反。

该功能与打开图标和关闭图标一起使用。当我们单击打开图标查看下拉链接时,它会将状态值设置为 true,显示下拉菜单,并出现一个关闭图标来代替打开图标。当我们想要关闭下拉链接时,我们只需点击关闭图标,在关闭下拉菜单后,它会被打开的图标替换,因为现在状态的值被设置为 false。

由于每个侧边链接都没有下拉菜单,它首先检查一个边线是否有一个 subNav 属性,该属性是从我们在 SidebarData.js 文件中创建的对象数组中用它定义的。如果该属性存在,那么它执行上述逻辑,否则侧链接正常出现,没有任何打开和关闭图标。

java 描述语言

import React, { useState } from "react";
import { Link } from "react-router-dom";
import styled from "styled-components";
const SidebarLink = styled(Link)`
  display: flex;
  color: #e1e9fc;
  justify-content: space-between;
  align-items: center;
  padding: 20px;
  list-style: none;
  height: 60px;
  text-decoration: none;
  font-size: 18px;
  &:hover {
    background: #252831;
    border-left: 4px solid green;
    cursor: pointer;
  }
`;
const SidebarLabel = styled.span`
  margin-left: 16px;
`;
const DropdownLink = styled(Link)`
  background: #252831;
  height: 60px;
  padding-left: 3rem;
  display: flex;
  align-items: center;
  text-decoration: none;
  color: #f5f5f5;
  font-size: 18px;
  &:hover {
    background: green;
    cursor: pointer;
  }
`;
const SubMenu = ({ item }) => {
  const [subnav, setSubnav] = useState(false);
  const showSubnav = () => setSubnav(!subnav);
  return (
    <>
            OnClick={item.subNav && showSubnav}>
        


          {item.icon}
          {item.title}
        

        

          {item.subNav && subnav
            ? item.iconOpened
            : item.subNav
            ? item.iconClosed
            : null}
        

      
      {subnav &&
        item.subNav.map((item, index) => {
          return (
            
              {item.icon}
              {item.title}
            

          );
        })}
    
  );
};
export default SubMenu;

现在我们完成了组件文件夹,现在我们操作页面。在 src/pages 中编辑项目侧栏的各种页面:

档案名称- AboutUs.js:

java 描述语言

import React from "react";
export const AboutUs = () => {
  return (
    


      

GeeksforGeeks About us


    

  );
};
export const OurAim = () => {
  return (
    

      

GeeksforGeeks Aim


    

  );
};
export const OurVision = () => {
  return (
    

      

GeeksforGeeks Vision


    

  );
};

文件名- 联系人:

java 描述语言

import React from "react";
const COntact= () => {
  return (
    


      

GeeksforGeeks Contact us


    

  );
};
export default Contact;

文件名- 事件. js:

java 描述语言

import React from "react";
export const Events = () => {
  return (
    


      

GeeksForGeeks Events


    

  );
};
export const EventsOne= () => {
  return (
    

      

GeeksforGeeks Event1


    

  );
};
export const EventsTwo = () => {
  return (
    

      

GeeksforGeeks Event2


    

  );
};

文件名-服务. js:

java 描述语言

import React from "react";
export const Services = () => {
  return (
    


      

GeeksforGeeks Services


    

  );
};
export const ServicesOne= () => {
  return (
    

      

GeeksforGeeks Service1


    

  );
};
export const ServicesTwo = () => {
  return (
    

      

GeeksforGeeks Service2


    

  );
};
export const ServicesThree = () => {
  return (
    

      

GeeksforGeeks Service3


    

  );
};

文件名- 支持. js:

java 描述语言

```jsx
import React from "react";

const Support = () => {
  return (
    


      GeeksforGeeks Support us
    

  );
};

export default Support;
```


推荐阅读
  • 在Linux系统中,网络配置是至关重要的任务之一。本文详细解析了Firewalld和Netfilter机制,并探讨了iptables的应用。通过使用`ip addr show`命令来查看网卡IP地址(需要安装`iproute`包),当网卡未分配IP地址或处于关闭状态时,可以通过`ip link set`命令进行配置和激活。此外,文章还介绍了如何利用Firewalld和iptables实现网络流量控制和安全策略管理,为系统管理员提供了实用的操作指南。 ... [详细]
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
  • 本文详细介绍了如何在 Linux 系统上安装 JDK 1.8、MySQL 和 Redis,并提供了相应的环境配置和验证步骤。 ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
    在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
  • 本文详细解析了使用C++实现的键盘输入记录程序的源代码,该程序在Windows应用程序开发中具有很高的实用价值。键盘记录功能不仅在远程控制软件中广泛应用,还为开发者提供了强大的调试和监控工具。通过具体实例,本文深入探讨了C++键盘记录程序的设计与实现,适合需要相关技术的开发者参考。 ... [详细]
  • 体积小巧的vsftpd与pureftpd Docker镜像在Unraid系统中的详细配置指南:支持TLS加密及IPv6协议
    本文详细介绍了如何在Unraid系统中配置体积小巧的vsftpd和Pure-FTPd Docker镜像,以支持TLS加密和IPv6协议。通过这些配置,用户可以实现安全、高效的文件传输服务,适用于各种网络环境。配置过程包括镜像的选择、环境变量的设置以及必要的安全措施,确保了系统的稳定性和数据的安全性。 ... [详细]
  • 本文以 www.域名.com 为例,详细介绍如何为每个注册用户提供独立的二级域名,如 abc.域名.com。实现这一功能的核心步骤包括:首先,确保域名支持泛解析,即将 A 记录设置为 *.域名.com,以便将所有二级域名请求指向同一服务器。接着,在服务器端使用 ASP.NET 2.0 进行配置,通过解析 HTTP 请求中的主机头信息,动态识别并处理不同的二级域名,从而实现个性化内容展示。此外,还需在数据库中维护用户与二级域名的对应关系,确保每个用户的二级域名都能正确映射到其专属内容。 ... [详细]
  • 如何使用ES6语法编写Webpack配置文件? ... [详细]
  • 为开发者提供了一系列实用的参考网站和资源链接,包括HTML速查手册( 和 ),帮助开发者快速查找和学习相关技术知识。此外,还涵盖了其他重要的开发工具和文档,为编程工作提供全面支持。 ... [详细]
  • 在Java分层设计模式中,典型的三层架构(3-tier application)将业务应用细分为表现层(UI)、业务逻辑层(BLL)和数据访问层(DAL)。这种分层结构不仅有助于提高代码的可维护性和可扩展性,还能有效分离关注点,使各层职责更加明确。通过合理的设计和实现,三层架构能够显著提升系统的整体性能和稳定性。 ... [详细]
  • Vue应用预渲染技术详解与实践 ... [详细]
  • 在使用SSH框架进行项目开发时,经常会遇到一些常见的问题。例如,在Spring配置文件中配置AOP事务声明后,进行单元测试时可能会出现“No Hibernate Session bound to thread”的错误。本文将详细探讨这一问题的原因,并提供有效的解决方案,帮助开发者顺利解决此类问题。 ... [详细]
  • 本文详细介绍了在 Vue.js 前端框架中集成 vue-i18n 插件以实现多语言支持的方法。通过具体的配置步骤和示例代码,帮助开发者快速掌握如何在项目中实现国际化功能,提升用户体验。同时,文章还探讨了常见的多语言切换问题及解决方案,为开发人员提供了实用的参考。 ... [详细]
  • 在GitHub上克隆vue-element-admin项目时遇到依赖安装错误
    在 GitHub 上克隆 vue-element-admin 项目后,使用 `npm install` 安装依赖时遇到了未知的 Git 错误。具体错误信息为 `npm ERR! code 128`,提示命令执行失败。这可能是由于网络问题、Git 配置不正确或某些依赖包的仓库地址无效导致的。建议检查网络连接、更新 Git 版本并确保所有依赖项的 URL 正确无误。 ... [详细]
author-avatar
夜笙_ciel
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有