在本教學課程中,我們將使用 React 建立一個 Lyrics Finder Web 應用程式。該專案非常適合想要練習整合 API、管理狀態和顯示動態內容的人。
歌詞查找器允許使用者透過輸入歌曲標題和藝術家姓名來搜尋歌詞。它從公共 API 獲取歌詞並將其顯示在螢幕上。用戶可以快速找到並閱讀自己喜歡的歌曲的歌詞。
專案組織如下:
├── public ├── src │ ├── components │ │ ├── LyricsFinder.jsx │ │ ├── SearchForm.jsx │ ├── App.jsx │ ├── App.css │ ├── index.js │ └── index.css ├── package.json └── README.md
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}}
此元件管理歌詞、載入和錯誤訊息的狀態。它從 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 設計應用程式以確保介面乾淨且使用者友好。
* { 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中文網其他相關文章!