首頁 > web前端 > js教程 > 使用 React 建立歌詞查找器應用程式

使用 React 建立歌詞查找器應用程式

WBOY
發布: 2024-09-10 11:08:05
原創
818 人瀏覽過

Building a Lyrics Finder App with 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 (
    <div className="lyrics-finder">
      <SearchForm onSearch={fetchLyrics} />
      {loading && <p>Loading...</p>}
      {error && <p className="error">{error}</p>}
      {lyrics && <pre className="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 (
    <form onSubmit={handleSubmit} className="search-form">
      <input
        type="text"
        placeholder="Song Title"
        value={song}
        onChange={(e) => setSong(e.target.value)}
      />
      <input
        type="text"
        placeholder="Artist Name"
        value={artist}
        onChange={(e) => setArtist(e.target.value)}
      />
      <button type="submit">Search</button>
    </form>
  );
};

export default SearchForm;
登入後複製

該組件接受用戶輸入的歌曲標題和藝術家並觸發搜尋功能。

應用程式元件

App 元件管理佈局並渲染 LyricsFinder 元件。

import LyricsFinder from './components/LyricsFinder'
import "./App.css"
const App = () => {
  return (
    <div className='app'>
      <div className="heading">
        <h1>Lyrics Finder</h1>
      </div>
      <LyricsFinder/>
      <div className="footer">
        <p>Made with ❤️ by Abhishek Gurjar</p>
      </div>
    </div>
  )
}

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.git
cd lyrics-finder
npm install
npm start
登入後複製

這將啟動開發伺服器,並且應用程式將在 http://localhost:3000 上運行。

現場演示

在此處查看歌詞查找器的現場演示。

結論

Lyrics Finder 專案是練習整合 API 和在 React 中處理動態內容的絕佳方法。它提供了一個使用乾淨且互動的使用者介面建立有用的應用程式的實際範例。

製作人員

  • 靈感:這個專案的靈感來自於在聽音樂時快速存取歌詞的需求。

作者

Abhishek Gurjar 是一位 Web 開發人員,熱衷於建立互動式且引人入勝的 Web 應用程式。您可以在 GitHub 上關注他的工作。

以上是使用 React 建立歌詞查找器應用程式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門推薦
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板