使用 React 构建歌词查找器应用程序

使用 react 构建歌词查找器应用程序

介绍

在本教程中,我们将使用 react 创建一个 lyrics finder web 应用程序。该项目非常适合那些想要练习集成 api、管理状态和显示动态内容的人。

项目概况

歌词查找器允许用户通过输入歌曲标题和艺术家姓名来搜索歌词。它从公共 api 获取歌词并将其显示在屏幕上。用户可以快速找到并阅读自己喜欢的歌曲的歌词。

特征

搜索功能:用户可以按歌曲标题和艺术家姓名搜索歌词。api 集成:从公共歌词 api 中获取歌词。动态内容:根据用户输入动态显示歌词。用户友好的界面:干净且易于使用的界面,用于搜索和查看歌词。

使用的技术

react:用于构建用户界面和管理组件状态。css:用于设计应用程序的样式。javascript:用于处理 api 请求和应用程序逻辑。

项目结构

项目组织如下:

├── public├── src│   ├── components│   │   ├── lyricsfinder.jsx│   │   ├── searchform.jsx│   ├── app.jsx│   ├── app.css│   ├── index.js│   └── index.css├── package.json└── readme.md

登录后复制

关键部件

lyricsfinder.jsx:管理搜索逻辑并显示获取的歌词。searchform.jsx:提供一个表单供用户输入歌曲标题和艺术家姓名。app.jsx:渲染主布局和 lyricsfinder 组件。

代码说明

lyricsfinder 组件

lyricsfinder 组件处理 api 集成并管理搜索结果。

import { usestate } from "react";import searchform from "./searchform";const lyricsfinder = () => {  const [lyrics, setlyrics] = usestate("");  const [loading, setloading] = usestate(false);  const [error, seterror] = usestate("");  const fetchlyrics = async (song, artist) => {    setloading(true);    seterror("");    try {      const response = await fetch(`https://api.lyrics.ovh/v1/${artist}/${song}`);      if (!response.ok) {        throw new error("lyrics not found");      }      const data = await response.json();      setlyrics(data.lyrics);    } catch (err) {      seterror(err.message);    } finally {      setloading(false);    }  };  return (    
{loading &&

loading...

} {error &&

{error}

} {lyrics &&
{lyrics}

登录后复制} );};export default lyricsfinder;

该组件管理歌词、加载和错误消息的状态。它从 api 获取歌词并显示它们。

搜索表单组件

searchform 组件提供了一个表单供用户输入歌曲标题和艺术家姓名。

import { usestate } from "react";const searchform = ({ onsearch }) => {  const [song, setsong] = usestate("");  const [artist, setartist] = usestate("");  const handlesubmit = (e) => {    e.preventdefault();    onsearch(song, artist);  };  return (           setsong(e.target.value)}      />       setartist(e.target.value)}      />            );};export default searchform;

登录后复制

该组件接受用户输入的歌曲标题和艺术家并触发搜索功能。

应用程序组件

app 组件管理布局并渲染 lyricsfinder 组件。

import lyricsfinder from './components/lyricsfinder'import "./app.css"const app = () => {  return (    

lyrics finder

made with ❤️ by abhishek gurjar

)}export default app

登录后复制

该组件提供标题并在中心呈现 lyricsfinder 组件。

css 样式

css 设计应用程序以确保界面干净且用户友好。

* {  box-sizing: border-box;}body {  margin: 0;  padding: 0;  font-family: sans-serif;}.app {  width: 100%;  height: 100vh;  background-image: url(./assets/images/bg.jpg);  background-size: cover;  background-repeat: no-repeat;  display: flex;  flex-direction: column;  align-items: center;  justify-content: center;}.heading {  width: 200px;  height: 40px;  display: flex;  align-items: center;  margin-bottom: 20px;  justify-content: center;  background-color: #eab229;  color: black;  border: 2px solid white;  border-radius: 20px;  text-align: center;}.heading h1 {  font-size: 18px;}.lyrics-container {  margin-top: 10px;  color: white;  display: flex;  align-items: center;  flex-direction: column;}.input-container {  display: flex;  align-items: center;  flex-direction: column;}.track-input-box {  margin: 7px;  width: 500px;  height: 30px;  background-color: #363636;  border: 1.5px solid white;  border-radius: 7px;  overflow: hidden;}.track-input-box input {  width: 480px;  height: 30px;  background-color: #363636;  color: white;  margin-left: 10px;  outline: none;  border: none;}.input-search {  display: flex;  align-items: center;  justify-content: center;}.artist-input-box {  margin: 7px;  width: 400px;  height: 30px;  background-color: #363636;  border: 1.5px solid white;  border-radius: 7px;  overflow: hidden;}.artist-input-box input {  width: 380px;  height: 30px;  margin-left: 10px;  background-color: #363636;  color: white;  border: none;  outline: none;}.search-btn {  width: 100px;  padding: 6px;  border-radius: 7px;  border: 1.5px solid white;  background-color: #0e74ad;  color: white;  font-size: 16px;}.search-btn:hover {  background-color: #15557a;}.output-container {  background-color: black;  width: 600px;  height: 300px;  border: 1.5px solid white;  border-radius: 7px;  overflow-y: scroll;  margin-block: 40px;}.output-container::-webkit-scrollbar {  display: none;}.output-container p {  margin: 30px;  text-align: center;  font-size: 16px;}.footer {  font-size: 14px;  color: white;}

登录后复制

样式确保布局简洁,具有用户友好的视觉效果和响应式设计。

安装与使用

要开始此项目,请克隆存储库并安装依赖项:

git clone https://github.com/abhishekgurjar-in/lyrics-finder.gitcd lyrics-findernpm installnpm start

登录后复制

这将启动开发服务器,并且应用程序将在 http://localhost:3000 上运行。

现场演示

在此处查看歌词查找器的现场演示。

结论

lyrics finder 项目是练习集成 api 和在 react 中处理动态内容的绝佳方法。它提供了一个使用干净且交互式的用户界面构建有用的应用程序的实际示例。

制作人员

灵感:该项目的灵感来自于在听音乐时快速访问歌词的需求。

作者

abhishek gurjar 是一位 web 开发人员,热衷于构建交互式且引人入胜的 web 应用程序。您可以在 github 上关注他的工作。

以上就是使用 React 构建歌词查找器应用程序的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2853879.html

(0)
上一篇 2025年3月10日 14:43:35
下一篇 2025年2月18日 01:53:39

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • CSS 定位 – 绝对、相对、固定和粘性

    第 11 讲:css 定位 – 绝对、相对、固定和粘性 欢迎来到《从基础到辉煌》课程第十一讲。在本次讲座中,我们将探讨css定位的不同类型:相对、绝对、固定和粘性。了解定位可以让您控制元素在页面上的显示位置以及用户与内容交互时元素的行为方式…

    2025年3月10日
    200
  • Tailwind CSS 与 Vanilla CSS:何时在 Web 开发项目中使用每种 CSS

    构建网站或 Web 应用程序时,使用 Tailwind CSS 和 vanilla CSS 之间的决定可能会显着影响您的工作流程、设计一致性和项目可扩展性。这两种选择都具有独特的优势,但正确的选择取决于您的具体项目要求和目标。 在本文中,我…

    2025年3月10日
    200
  • 使用 React 构建主题切换的 Todo 应用程序

    介绍 在本教程中,我们将使用 react 构建一个 待办事项列表 web 应用程序。该项目有助于理解状态管理、事件处理以及在 react 中使用列表。对于想要增强 react 开发技能的初学者来说,它是完美的选择。 项目概况 待办事项列表应…

    2025年3月10日
    200
  • 构建 React 费用跟踪应用程序

    介绍 在本教程中,我们将使用 react 创建一个 expense tracker web 应用程序。该项目将帮助您了解 react 中的状态管理、事件处理和动态列表更新。对于旨在通过构建实用且有用的应用程序来加强 react 开发知识的初…

    2025年3月10日
    200
  • 月相 | CSS 艺术:空间

    CSS 艺术:互动空间场景 这是前端挑战 v24.09.04,CSS 艺术:空间的提交。 灵感 对于这个挑战,我想捕捉夜空的动态和互动性质。不断变化的月相、闪烁的星星,以及偶尔令人兴奋的流星,一直让人类着迷。通过创建这些天体现象的动画和交互…

    2025年3月10日
    200
  • 使我的标记更加迷人:空间

    这是前端挑战 v24.09.04 的提交,Glam Up My Markup: Space 我建造了什么 针对此挑战,我使用 HTML、CSS 和 JavaScript 创建了一个以太阳系为主题的交互式网页。目标是通过视觉上引人入胜的设计和…

    2025年3月10日
    200
  • 使用 React 构建 Fylo 云存储网站

    介绍 在这篇博文中,我们将逐步介绍如何使用 react 创建一个功能丰富的云存储网站。该网站受 fylo 启发,提供了主页、功能、工作原理、感言和页脚等部分。在此过程中,我们将讨论用于构建这个完全响应式网站的结构、组件和样式。 项目概况 该…

    2025年3月10日 编程技术
    200
  • 浏览器中的星星:网络般的太空之旅

    这是前端挑战 v24.09.04 的提交,Glam Up My Markup: Space 我建造了什么我创建了 Solar System Explorer,这是一个交互式 Web 应用程序,可带领用户踏上令人惊叹的太阳系之旅。该项目旨在将…

    2025年3月10日
    200
  • CSS 动画 – 让元素栩栩如生

    第 13 讲:css 动画 – 让元素栩栩如生 欢迎来到《从基础到辉煌》课程第13讲!在这篇文章中,我们将探索 css 动画——一种通过随着时间的推移为网页元素添加动画效果的强大方法。借助 css 动画,您可以创建流畅的动态效果,从而增强用…

    2025年3月10日
    200
  • 使用 rel="preload" 加速您的网站

    在提高网站性能方面,每一毫秒都很重要。减少关键资源加载时间的最有效方法之一是使用 html 链接 rel=”preload” 属性。在这篇文章中,我们将深入探讨预加载的工作原理、何时使用它以及它如何显着改善网站上的用…

    2025年3月10日
    200

发表回复

登录后才能评论