【最佳实践】 使用react写一个sliderbar 侧滑导航组件

news2024/11/24 4:55:53

大家好,我是DX3906

      我们现在使用React 来实现一个侧边导航组件(sidebar),你可以使用 CSS 和 React 的状态管理来实现。下面是一个简单的示例,展示如何创建一个基本的侧边导航组件:

1. 安装依赖:首先确保你已经安装了 React 和 ReactDOM。

2. 创建 Sidebar 组件:我们将创建一个简单的 Sidebar 组件,它将包含一个菜单列表。

3. 样式:使用 CSS 来模仿 Ant Design Mobile 的侧边导航样式。

下面是具体的实现代码:

import React, { useState } from 'react';
import './Sidebar.css'; // 导入样式文件

const Sidebar = ({ menuItems }) => {
  const [visible, setVisible] = useState(false);

  const toggleSidebar = () => {
    setVisible(!visible);
  };

  return (
    <div className="sidebar-container">
      <div className={`sidebar-content ${visible ? 'show' : ''}`}>
        <ul>
          {menuItems.map((item, index) => (
            <li key={index} onClick={toggleSidebar}>
              {item.label}
            </li>
          ))}
        </ul>
      </div>
      <button className="sidebar-toggle" onClick={toggleSidebar}>
        菜单
      </button>
    </div>
  );
};

export default Sidebar;

// Sidebar.css
.sidebar-container {
  position: relative;
}

.sidebar-toggle {
  position: absolute;
  top: 10px;
  right: 10px;
  cursor: pointer;
}

.sidebar-content {
  width: 250px;
  height: 100vh;
  background: #fff;
  box-shadow: 2px 0 8px rgba(0, 0, 0, 0.1);
  position: fixed;
  top: 0;
  left: -250px;
  transition: transform 0.3s ease-in-out;
}

.sidebar-content.show {
  transform: translateX(250px);
}

ul {
  list-style: none;
  padding: 0;
  margin: 0;
}

li {
  padding: 10px;
  border-bottom: 1px solid #eee;
  cursor: pointer;
}

        这个组件接受一个 `menuItems` 数组作为属性,每个菜单项是一个对象,包含一个 `label` 属性。点击按钮会切换侧边栏的显示状态。

        你可以在你的应用中这样使用这个 Sidebar 组件:

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

const menuItems = [
  { label: '首页' },
  { label: '产品' },
  { label: '关于我们' },
  { label: '联系方式' }
];

const App = () => (
  <div>
    <Sidebar menuItems={menuItems} />
  </div>
);

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

请注意,这只是一个基础示例,实际使用中你可能需要添加更多的功能和样式调整,以满足你的具体需求。

结语

🔥如果此文对你有帮助的话,欢迎💗关注、👍点赞、⭐收藏、✍️评论,支持一下博主~ 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1862401.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

浅谈逻辑控制器之Include控制器

浅谈逻辑控制器之Include控制器 “Include控制器”是一个特别实用的功能&#xff0c;它允许用户将一个或多个测试片段&#xff08;通常是请求&#xff09;包含到不同的测试计划或模块中&#xff0c;从而实现代码的复用和测试结构的优化。本文档将详细介绍JMeter中的Include控制…

并发编程-02深入理解Java线程

一 线程基础知识 1.1 理解线程和进程 进程和线程的概念: 进程: 程序由指令和数据组成&#xff0c;但这些指令要运行&#xff0c;数据要读写&#xff0c;就必须将指令加载至CPU&#xff0c;数据加载至内存。在指令运行过程中还需要用到磁盘、网络等设备。进程就是用来加载指…

Gobject tutorial 十

参考&#xff1a;GLib – 2.0: The Main Event Loop The Main Event Loop 主事件循环管理所有可用的事件源&#xff0c;事件可以是各种类型、各种数量的。比如说文件描述符(普通文件、管道以及套接字)和超时。 新类型的事件源可以通过函数g_source_attach来添加。为了使多个…

输入/输出文字

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 在海龟绘图中&#xff0c;也可以输入或者输出文字&#xff0c;下面分别进行介绍。 1 输出文字 输出文字可以使用write()方法来实现&#xff0c;语…

【QCustomPlot实战系列】QCPGraph区域高亮

使用QCPDataSelection来设置选中的区域&#xff0c;并将QCPGraph的可选择区域设置成QCP::stMultipleDataRanges void AreaPieces::initCustomPlot(QCustomPlot *parentPlot) {QVector<double> x {0, 1, 2, 3, 4, 5, 6, 7, 8};QVector<double> y {200, 560, 750…

解决Vue+Vite打包后Leaflet的marker图标不显示的问题

前言 用Leaflet写关于WebGIS的开发&#xff0c;用Vite或者webpack打包&#xff0c;打包后会找不到图标&#xff0c;如下所示。 直言的说&#xff0c;笔者去网上搜了搜&#xff0c;其实收到一个比较好是答案。网址如下。 &#xff08;完美解决~&#xff09;关于VueLeaflet添加…

P2实验室装修标准都有哪些

P2实验室&#xff08;也称为生物安全二级实验室&#xff0c;BSL-2实验室&#xff09;的装修标准需要满足一系列的设计和施工要求&#xff0c;以确保实验室的安全性和功能性。因此&#xff0c;P2实验室装修标准不仅要满足一般实验室的要求&#xff0c;还需符合生物安全的特殊规定…

企业运维六边形战士 质量稳定 效率为王

随着信息化的不断深入和扩展&#xff0c;企业IT系统的复杂性和设备多样性日益增加。为了保障业务的高可用性和连续性&#xff0c;企业需要一个全面、高效、智能的一体化运维管理平台。在用户市场的推动下&#xff0c;LinkSLA智能运维管家展现出【六边形战士】的优质属性&#x…

数据结构-----【链表:刷题】

-------------------------------------------基础题参照leetcode---------------------------------------------------------------------------------------------------------- 【2】两数相加 /*** Definition for singly-linked list.* struct ListNode {* int val;…

ChatBI开源实现: 基于SuperSonic的AI+BI的产品设计

产品起源 为什么要做这样的产品&#xff1f;文章《ChatBI开源实现: AIBI的产品设计》中有介绍 为什么要自己做这样的产品&#xff1f;1、低成本试错&#xff1b;2、未来数据生态入口&#xff1b; 为什么要基于Supersonic做&#xff1f; 开源协议友好&#xff1a;可魔改商用 社区…

仿真分析 + AI:创建基础设施的新未来

吴付标 大漠风电&#xff0c;深远海平台&#xff0c;一带一路上的高铁、电站…… 在新一轮的基础设施建设浪潮中&#xff0c;项目与结构变得越来越复杂&#xff0c;碳中和与可持续发展的要求越来越高&#xff0c;仿真分析技术应运而兴。 在最近召开的Bentley软件2024创新智旅 …

【Python/Pytorch - 网络模型】-- 高阶SVD算法

文章目录 文章目录 00 写在前面01 基于Python版本的高阶SVD算代码02 HOSVD 的步骤 00 写在前面 高阶奇异值分解&#xff08;Higher-Order SVD&#xff0c;HOSVD&#xff09;是一种将传统的奇异值分解&#xff08;SVD&#xff09;扩展到高阶张量的方法。它能够将一个高阶张量分…

FileNotFoundError: Cannot find DGL C++ graphbolt library at ...

FileNotFoundError: Cannot find DGL C graphbolt library at ...-CSDN博客https://blog.csdn.net/weixin_44017989/article/details/137658749

SAP ABAP 之OOALV

文章目录 前言一、案例介绍/笔者需求二、SE24 查看类 a.基本属性 Properties b.接口 Interfaces c.友元 Friends d.属性 Attributes e.方法 Methods f.事件 Events g.局部类型 Types …

韩顺平0基础学java——第31天

p612-637 IO流 IO流原理及流的分类 Java lO流原理 1.I/O是Input/Output的缩弓&#xff0c;IV/O技术是非常实用的技术&#xff0c;用于处理数据传输。 如读/写文件&#xff0c;网络通讯等。 2. Java程序中&#xff0c;对于数据的输入/输出操作以”流(stream)”的方式进行。 3…

Orangepi Zero2 全志H616 的初识

目录 一、全志H616简介 1.1 为什么学&#xff1a; 1.2 学什么&#xff1a; 1.3 全志H616平台介绍&#xff1a; 二、刷机 系统启动和初始化配置 2.1 需要的工具&#xff1a; 2.2 工具安装&#xff1a; 2.3 刷机&#xff1a; 2.4 登录系统&#xff1a; 2.5 修改登录密码…

Android开发系列(十)Jetpack Compose之Card

Card是一种常用的UI组件&#xff0c;用于显示一个具有卡片样式的容器。Card组件通常用于显示列表项、卡片式布局或任何需要显示边框和阴影的UI元素。 使用Card组件&#xff0c;您可以轻松地创建带有卡片效果的UI元素。以下是一些Card组件的常见属性和功能&#xff1a; elevati…

云计算基础知识

前言&#xff1a; 随着ICT技术的高速发展&#xff0c;企业架构对计算、存储、网络资源的需求更高&#xff0c;急需一种新的架构来承载业务&#xff0c;以获得持续&#xff0c;高速&#xff0c;高效的发展&#xff0c;云计算应运而生。 云计算背景 信息大爆炸时代&#xff1a…

导出 S 参数扫描结果供 INTERCONNECT 使用

导出 S 参数扫描结果供 INTERCONNECT 使用 正文正文 有时候,对于 FDTD 无法直接进行仿真的大型仿真链路,我们需要使用 FDTD 针对单个小的模块进行仿真,再将得到的 S 参数结果导入到 INTERCONNECT 中使用,最终完成整个链路的仿真。通常完成 S 参数扫描后其状态如下图所示:…