codnjs779 / playerApp

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Title

๐Ÿ› ์œ ํŠœ๋ธŒApi ํ™œ์šฉํ•œ ์ธ๊ธฐ๋™์˜์ƒ, ๊ฒ€์ƒ‰๊ธฐ๋Šฅ ํŽ˜์ด์ง€

Install

npx create-react-app [ํด๋”๋ช…]
npm install -g yarn
yarn add axios
yarn add @fortawesome/fontawesome-free

Usage

yarn start

์ž๋ฃŒ๊ตฌ์กฐ

folder๊ตฌ์กฐ

์ปดํฌ๋„ŒํŠธ

๐Ÿ“‚index.js

  • api๋ฅผ ํ˜ธ์ถœํ•˜๋Š” youtubeApi.js์—์„œ ๋ฐ›์•„์˜จ ํ•จ์ˆ˜์— axios create๋ฅผ ๋„ฃ์–ด์คŒ
  • axios create (๊ธฐ๋ณธ url, .env key๊ฐ’ )

๐Ÿ“‚App.jsx

  • ์ƒํƒœ์—…๋ฐ์ดํŠธ๋ฅผ ์œ„ํ•œ state๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์ตœ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ
 const inputController = useCallback(
        (query) => {
            setLoading(true);
            setSelect(null);
            youtube
                .inputController(query) //
                .then((videos) => {
                    setVideo(videos);
                    setLoading(false);
                });
        },
        [youtube]
    );

useCallback ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ ์ด์œ ? inputController๋ฅผ ์‹คํ–‰ํ•˜๋Š” inputForm.jsx์— ๋ถˆํ•„์š”ํ•œ ๋ฆฌ๋ Œ๋”๋ง์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด memo๋ฅผ ์จ์คฌ๋Š”๋ฐ, ๊ทธ ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ์ธ App์—์„œ ๋ฆฌ๋ Œ๋”๊ฐ€ ๋นˆ๋ฒˆํ•˜๊ฒŒ ์ผ์–ด๋‚˜๊ธฐ ๋•Œ๋ฌธ์— useCallback์„ ์‚ฌ์šฉํ•ด์„œ ํ•จ์ˆ˜๋ฅผ ์ €์žฅํ•ด์„œ ํ•„์š”ํ•  ๋•Œ๋งŒ ๋ฆฌ๋ Œ๋”๋ง์ด ์ผ์–ด๋‚˜๊ฒŒ ํ•˜๊ธฐ์œ„ํ•จ.

setLoading(true) -> ๋กœ๋”ฉ์Šคํ”ผ๋„ˆ ํ™œ์„ฑํ™”. ๊ฒ€์ƒ‰๊ฐ’์ด ์ž…๋ ฅ๋˜๊ณ  ์•„์ง ํ•ด๋‹น ๋น„๋””์˜ค๊ฐ€ ๋‹ค ๋กœ๋”ฉ๋˜์ง€ ์•Š์•˜์„ ๋•Œ ๋กœ๋”ฉ์Šคํ”ผ๋„ˆ๋ฅผ ํ™œ์„ฑํ™” ํ•ด์ค€๋‹ค์Œ ๋‹ค์‹œ false๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝํ•ด์„œ ๋น„ํ™œ์„ฑํ™” ํ•ด์คŒ

    useEffect(() => {
        youtube.mostPopular().then((videos) => {
            setVideo(videos);
        });
    }, [youtube]);

useEffect ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ ์ด์œ ? ์ฒซ ํ™”๋ฉด์˜ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ํ•จ์ˆ˜์ด๊ธฐ ๋•Œ๋ฌธ์— mount๋˜๋ฉด ์‹คํ–‰๋˜์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ.

๐Ÿ“‚.env

REACT_APP_YOUTUBE_API_KEY=[๋ฐœ๊ธ‰๋ฐ›์€ ํ‚ค]

ํ‚ค๊ฐ’์ด ๋…ธ์ถœ๋˜๋ฉด ์ •๋ณด๊ฐ€ ๋…ธ์ถœ๋  ์œ„ํ—˜์ด ์žˆ์œผ๋‹ˆ ํ‚ค๊ฐ’์„ .envํŒŒ์ผ์— ๊ผญ REACTAPP๋ฅผ ์จ์„œ ์ž…๋ ฅํ•ด์ค€๋‹ค์Œ(๋ฆฌ์•กํŠธ๊ฐ€ ์ •ํ•œ ๋ฒ•์น™) ํ•ด๋‹น ํŒŒ์ผ์„ gitignore์— ์ถ”๊ฐ€.

๐Ÿ“‚youtubeApi.js

class Youtube {
    constructor(httpClient) {
        this.youtube = httpClient;
    }

    async mostPopular() {
        const response = await this.youtube.get("videos", {
            params: {
                part: "snippet",
                chart: "mostPopular",
                maxResults: 25,
            },
        });
        return response.data.items;
    }

๋น„๋™๊ธฐ ์ž‘์—…์„ ์ˆœ์„œ๋Œ€๋กœ ์ฒ˜๋ฆฌํ•ด์ฃผ๊ธฐ ์œ„ํ•ด async, await์„ ์‚ฌ์šฉํ•œ๋‹ค. ๋ฐ›์•„์˜จ httpClient(=axios create์ •๋ณด)๋ฅผ this.youtube์— ํ• ๋‹นํ•ด์ค€๋‹ค.

About


Languages

Language:JavaScript 71.6%Language:CSS 22.9%Language:HTML 5.6%