构建一个具有深色模式的简单React Web应用

在当今的Web开发世界里,创建一个既美观又功能丰富的用户界面是至关重要的。在本文中,我们将探讨如何使用React构建一个简单但功能强大的Web应用,它包含导航栏、内容展示区域和深色模式切换功能。

项目概述

我们的目标是创建一个具有以下特性的Web应用:

  1. 左侧导航栏,包含四个链接:首页、产品、我的团队和联系人
  2. 右侧内容区域,根据选择的导航项显示不同内容
  3. 深色/浅色模式切换功能

技术栈

对于这个项目,我们将使用以下技术:

  • React: 用于构建用户界面的JavaScript库
  • Tailwind CSS: 用于快速样式设计的实用程序优先的CSS框架
  • lucide-react: 提供美观的图标集合

实现步骤

1. 设置基本结构

首先,我们创建一个基本的React组件结构:

import React, { useState } from 'react';
import { Sun, Moon } from 'lucide-react';const App = () => {// ... component logic will go herereturn (// ... JSX structure will go here);
};export default App;

2. 创建导航栏

我们使用一个数组来存储导航项,并使用map函数来渲染它们:

const navigationItems = ['Home', 'Products', 'My Team', 'Contacts'];// Inside the component
const [activeTab, setActiveTab] = useState('Home');// In the JSX
<nav className={`w-64 p-4 ${darkMode ? 'bg-gray-800' : 'bg-gray-200'}`}><ul>{navigationItems.map((item) => (<li key={item} className="mb-2"><buttononClick={() => setActiveTab(item)}className={`w-full text-left p-2 rounded ${activeTab === item? darkMode? 'bg-blue-600 text-white': 'bg-blue-500 text-white': darkMode? 'hover:bg-gray-700': 'hover:bg-gray-300'}`}>{item}</button></li>))}</ul>
</nav>

3. 实现内容区域

我们创建一个条件渲染的内容区域,根据选中的标签显示不同的内容:

<main className="flex-1 p-4">{activeTab === 'Contacts' ? (<div><h2 className="text-2xl font-bold mb-4">Contacts</h2>{/* Contacts list will go here */}</div>) : (<div className="flex items-center justify-center h-full"><p className="text-2xl">Content for {activeTab}</p></div>)}
</main>

4. 添加深色模式功能

我们使用React的useState钩子来管理深色模式状态:

const [darkMode, setDarkMode] = useState(false);const toggleDarkMode = () => {setDarkMode(!darkMode);
};// In the JSX
<buttononClick={toggleDarkMode}className={`mt-4 p-2 rounded ${darkMode ? 'bg-yellow-400 text-black' : 'bg-gray-700 text-white'}`}
>{darkMode ? <Sun size={20} /> : <Moon size={20} />}
</button>

5. 应用深色模式样式

我们使用条件类名来应用深色模式样式:

<div className={`flex h-screen ${darkMode ? 'bg-gray-900 text-white' : 'bg-white text-black'}`}>{/* App content */}
</div>

结果如下

在这里插入图片描述

结论

通过这个简单的项目,我们展示了如何使用React和Tailwind CSS创建一个功能丰富的Web应用。这个应用不仅有清晰的导航结构,还包含了深色模式切换功能,提高了用户体验。

从这里开始,你可以进一步扩展应用功能,如添加更多页面内容、实现状态管理或集成后端API。React的灵活性和强大的生态系统为进一步开发提供了无限可能。

记住,良好的用户界面设计和用户体验是成功Web应用的关键。不断迭代和改进你的设计,以满足用户需求和期望。祝你编码愉快!

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

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

相关文章

Qt创建自定义组件并且promote to之后导致编译错误(CMake)

创建自定组件并且加入到全局(勾选"Global include"选项)后&#xff0c;重新编译&#xff0c;元对象编译器生成的ui_xxxx.h文件中会新加入自定义组件的头文件&#xff1a; 如图所示&#xff0c;编译器提示找不到自定义组件的头文件&#xff1a; Solution: 在CMakeL…

opencascade AIS_InteractiveContext源码学习9 obsolete methods

AIS_InteractiveContext 前言 交互上下文&#xff08;Interactive Context&#xff09;允许您在一个或多个视图器中管理交互对象的图形行为和选择。类方法使这一操作非常透明。需要记住的是&#xff0c;对于已经被交互上下文识别的交互对象&#xff0c;必须使用上下文方法进行…

Leetcode3216. 交换后字典序最小的字符串

Every day a Leetcode 题目来源&#xff1a;3216. 交换后字典序最小的字符串 解法1&#xff1a;模拟 找到第一个 s[i] > s[i 1]&#xff0c;且它们奇偶性相同&#xff0c;交换它们。 代码&#xff1a; /** lc appleetcode.cn id3216 langcpp** [3216] 交换后字典序最小…

Python群体趋向性潜关联有向无向多图层算法

&#x1f3af;要点 &#x1f3af;算法模型图层节点和边数学定义 | &#x1f3af;算法应用于贝叶斯推理或最大似然优化概率建模的多图层生成模型 | &#x1f3af;算法结合图结构边和节点属性 | &#x1f3af;对比群体关联预测推理生成式期望最大化多图层算法 | &#x1f3af;使…

【故障排除】Unity在编辑器模式下Play时闪退

一开始以为是偶然的情况&#xff0c;但逐渐发现了规律&#xff1a; 每次某个角色释放技能的时候就会闪退。 为了找到问题代码&#xff0c;找了一下存放运行Log的文件夹&#xff1a; 打开 Console 窗口&#xff08;菜单&#xff1a;Window > General > Console&#xff…

[Jenkins]jenkins-cli.jar调用用户token启动任务

背景&#xff1a;项目入了一群od伙伴&#xff0c;但是od伙伴有单独的构建工程需要提交&#xff0c;由于jenkins的版本太拉闸&#xff0c;不能配置根据role和项目分权限&#xff0c;插件安装失败&#xff0c;不得已想到一个办法。让OD伙伴&#xff0c;在本地&#xff0c;用java&…

Mindspore框架循环神经网络RNN模型实现情感分类|(二)词向量

Mindspore框架循环神经网络RNN模型实现情感分类 Mindspore框架循环神经网络RNN模型实现情感分类|&#xff08;一&#xff09;IMDB影评数据集准备 Mindspore框架循环神经网络RNN模型实现情感分类|&#xff08;二&#xff09;预训练词向量 Mindspore框架循环神经网络RNN模型实现…

keil5中 FATAL ERROR L250: CODE SIZE LIMIT IN RESTRICTED VERSION EXCEEDED的问题

用破解软件激活一下cid&#xff1a; 再重新进入keil中&#xff0c;rebuild&#xff1a;

【C++】【继承】【子对象】【构造函数】含子对象的派生类的构造函数写法

&#xff08;1&#xff09;子对象的概念&#xff1a;若派生类A1的数据成员中包含基类A的对象a&#xff0c;则a为派生类A1的子对象 &#xff08;2&#xff09;含子对象的派生类的构造函数的执行顺序是&#xff1a; ①调用基类构造函数&#xff0c;对基类数据成员初始化 ②调用子…

K8s-控制器

一 为什么使用控制器 pod控制器 作用&#xff1a;1.pod类型资源删除&#xff0c;不会重建 2.控制器可以帮助用户监控&#xff0c;并保证节点上运行定义好的pod副本数 3.pod超过或低于用户期望&#xff0c;控制器会创建、删除pod副本数量 控制器类型&am…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] LYA的马跳棋游戏(200分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 🍿 最新华为OD机试D卷目录,全、新、准,题目覆盖率达 95% 以上,支持题目在线…

Ubuntu 22.04安装Visual Studio Code(VS Code)配置C++,Python

目录 1,下载 通过命令行安装 2,配置 2.1 vscode安装C/C 2.1.1 vscode安装运行环境 3,测试 vscode测试 4&#xff0c;配置python 选择解释器Python是一个解释性语言&#xff0c;现在需告知VSCode使用哪个解释器 ctrlshiftp 输入&#xff1a;Python: Select Interprete…

Mysql explain 优化解析

explain 解释 select_type 效率对比 MySQL 中 EXPLAIN 语句的 select_type 列描述了查询的类型,不同的 select_type 类型在效率上会有所差异。下面我们来比较一下各种 select_type 的效率: SIMPLE: 这是最简单的查询类型,表示查询不包含子查询或 UNION 操作。 这种查询通常是…

Spring Boot集成Spire.doc实现对word的操作

1.什么是spire.doc? Spire.Doc for Java 是一款专业的 Java Word 组件&#xff0c;开发人员使用它可以轻松地将 Word 文档创建、读取、编辑、转换和打印等功能集成到自己的 Java 应用程序中。作为一款完全独立的组件&#xff0c;Spire.Doc for Java 的运行环境无需安装 Micro…

【stm32项目】基于stm32智能宠物喂养(完整工程资料源码)

基于STM32宠物喂养系统 前言&#xff1a; 随着人们生活幸福指数的提高&#xff0c;越来越多的家庭选择养宠物来为生活增添乐趣。然而&#xff0c;由于工作等原因&#xff0c;许多主人无法及时为宠物提供充足的食物与水。为了解决这一问题&#xff0c;我设计了一款便捷的宠物喂…

【Linux】centos7安装php7.4

环境说明 本文档在服务器不能连接互联网的情况下&#xff0c;进行安装php7.4及其扩展。 操作系统&#xff1a;centos7.6 架构&#xff1a;X86_64 一、安装依赖&#xff08;可选&#xff09; 说明&#xff1a;服务器能联网就可以通过 yum install 命令下载对应php需要的依赖…

设计模式之策略模式_入门

前言 最近接触了优惠券相关的业务&#xff0c;如果是以前&#xff0c;我第一时间想到的就是if_else开始套&#xff0c;这样的话耦合度太高了&#xff0c;如果后期添加或者删除优惠券&#xff0c;必须直接修改业务代码&#xff0c;不符合开闭原则&#xff0c;这时候就可以选择我…

【TypeScript 一点点教程】

文章目录 一、开发环境搭建二、基本类型2.1 类型声明2.2 基本类型 三、编译3.1 tsc命令3.2 tsconfig.json3.2.1 基本配置项includeexcludeextendsfiles 3.2.2 compilerOptions编译器的配置项 四、面向对象4.1 类4.2 继承4.3 抽象类4.4 接口 一、开发环境搭建 下载Node.js《Nod…

usb pd message结构解析

usb pd 3.1规范定义了三种类型的消息: •简短的控制消息&#xff0c;用于管理端口伙伴之间的消息流或交换不需要额外数据的消息。控制消息的长度为16位。 •用于在一对端口伙伴之间交换信息的数据消息。数据报文的长度范围是48 ~ 240位。 有三种类型的数据消息: ▪那些用于暴露…

【区块链+绿色低碳】双碳数字化管控平台 | FISCO BCOS应用案例

地方政府、园区及企业实现“双碳”目标过程中存在一些挑战与难点&#xff1a; 1. 管理者难以掌握完整、准确、全面的碳排放数据进行科学决策&#xff1a;由于碳排放核算需要对数据的来源、核算方法 的规范性和采集方法的科学性有严格要求&#xff0c;当前面临碳排放数据数据采…