Frontend ๊ฐœ๋ฐœ์ž - hyo.loui

Project: Develife - main ๊ตฌ์„ฑ๊ณผ React-Query ์ ์šฉ ๋ณธ๋ฌธ

Project

Project: Develife - main ๊ตฌ์„ฑ๊ณผ React-Query ์ ์šฉ

hyo.loui 2023. 1. 26. 00:34

๐ŸŽฏ๋ชฉ์  :

 

Youtube API ํ™œ์šฉ

(๋น„๋™๊ธฐ)์„œ๋ฒ„ํ†ต์‹  : React-Query ์ ์šฉ response ๋กœ UI๊ตฌ์„ฑ 

 

๐Ÿคข ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ… :

  • filter ๋ฉ”์„œ๋“œ ๋ฌธ์ œ ํ•ด๊ฒฐ

1. react query

 

Youtube API ํ™œ์šฉ์— ์žˆ์–ด

์„œ๋ฒ„ํ†ต์‹ ์˜ ์ƒ์‚ฐ์„ฑ์„ ์œ„ํ•ด

react-query ์ ์šฉ์„ ๊ธฐํšํ–ˆ๋‹ค.

 

api.js์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ํ•จ์ˆ˜๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ํŒŒ์ผ์„ ๋”ฐ๋กœ ๋ถ„๋ฆฌํ–ˆ๊ณ 

์ค‘๋ณต๋˜๋Š” url ๊ณผ api key๋Š” ๋”ฐ๋กœ ๋ณ€์ˆ˜์„ ์–ธ์„ ํ•ด์ฃผ์—ˆ๋‹ค.

 

ํ•„์š”ํ•œ component์—์„œ react-query๋ฅผ ์—ฐ๊ฒฐํ•ด

์œ„ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก import ํ–ˆ๋‹ค.

 

๋ณ„์นญ์„ ๋ถ™์—ฌ ๋ฐ์ดํ„ฐ์˜ ๋ชฉ์ ์„ ์ •ํ™•ํ•˜๊ฒŒ ๋ช…์‹œํ–ˆ๋‹ค.

 

 


2. UI ์ƒ์„ฑ

 

์œ„์—์„œ react-query๋กœ ๊ฐ€์ ธ์˜จ AllPlayList ๋ผ๋Š” ๋ฐฐ์—ดํ˜• ๋ฐ์ดํ„ฐ๋Š”

map ๋ฉ”์„œ๋“œ๋กœ ํ•˜๋‚˜์”ฉ ๋Œ๋ฉฐ,

์ด๋ฏธ์ง€ํƒœ๊ทธ์˜ source๋ฅผ ๋„ฃ์–ด ์ฃผ์—ˆ๊ณ 

ํ”„๋กœ์ ํŠธ ๊ธฐํš์ƒ title์„ ์‚ฌ์šฉ ํ•  ์ผ์ด ์—†์—ˆ์ง€๋งŒ,

์‚ฌ์šฉ์„ฑ์„ ๊ณ ๋ คํ•ด alt์— title์„ ๋„ฃ์–ด์ฃผ์—ˆ๋‹ค.

 

๋˜ ํด๋ฆญ์‹œ ๋ชจ๋‹ฌ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ Œ๋”๋ง์ด ๋˜๋Š”๋ฐ
๋ฏธ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „๋‹ฌํ•  videoId ๊ฐ’์„ ๋„ฃ์—ˆ๋‹ค.

 

์™œ๋ƒํ•˜๋ฉด, ๋ชจ๋‹ฌ์—์„œ iframe ํƒœ๊ทธ๋กœ src ๋ฅผ ๋„ฃ์–ด์ค„ ๋•Œ

ํ•ด๋‹น ๋น„๋””์˜ค์˜ ๊ณ ์œ  ์•„์ด๋””๊ฐ’์ด ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

 

 

+ ์œ„ ๊ณผ์ •์—์„œ filter๋ฅผ ํ™œ์šฉํ•ด ๋ฐฐ์—ด์˜

์ฒซ๋ฒˆ์งธ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ์™ธํ•ด์•ผ ํ•˜๋Š” ๋กœ์ง์„ ๊ตฌ์„ฑํ•ด์•ผํ–ˆ๋‹ค.

 

ํ•˜์ง€๋งŒ ๋ฐ์ดํ„ฐ๊ฐ€ ์•„๋ฌด๋Ÿฐ ๋ณ€ํ™”๊ฐ€ ์ƒ๊ธฐ์ง€ ์•Š์•„ ์‹œ๊ฐ„์†Œ์š”๊ฐ€ ์žˆ์—ˆ๋‹ค..ใ… ใ… 

์•„๋ž˜ ์ฐธ์กฐ `ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…`

 


3. modal

 

 

modal์˜ ํ† ๊ธ€ ์‚ฌ์šฉ์„ ์œ„ํ•œ state๋ฅผ ๋งŒ๋“ค์–ด ์ฃผ์—ˆ๊ณ ,

๋น„๊ต์  ๊ฐ„๋‹จํ•œ ๋‚ด์šฉ์ธ id๋ฅผ props๋กœ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•œ modalPlayId state๋ฅผ ์ƒ์„ฑํ•ด ์ฃผ์—ˆ๋‹ค.

 


4. iframe (player)

 

์œ„์ฒ˜๋Ÿผ prop์œผ๋กœ ๊ฐ€์ ธ์˜จ id๊ฐ’์„ ์ง€์ •ํ•˜์—ฌ ๋ชจ๋‹ฌ๋งˆ๋‹ค

src URI์ฃผ์†Œ๊ฐ€ ๋‹ค๋ฅด๊ฒŒ ๊ตฌ์„ฑํ–ˆ๋‹ค.

 


+ ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…  :

 

์œ„ ์ฝ”๋“œ๋ฅผ ์ฝ˜์†”์— ์ถœ๋ ฅํ•ด๋ด๋„ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€ํ•จ์—†์ด

๋˜‘๊ฐ™์€ ๋‚ด์šฉ์ด์˜€๋‹ค..

 

ํ•˜์ง€๋งŒ ๊ตฌ์กฐ๋ฅผ ์ž˜ ์‚ดํŽด๋ณด์ž

 

filter ํ•ด์•ผ ํ•  ๋Œ€์ƒ์€ array ์ด๋‹ค

[ {}, {}, ...{} ]

 

ํ•˜์ง€๋งŒ filter๊ฐ€ ๋ฐ”๋ผ๋ณด๋Š” ๋Œ€์ƒ์€ ๊ฐ์ฒด์˜€๋‹ค.

{}, {}, ...{} ]

 

๋˜ ๋ฐฐ์—ด ๋‚ด๋ถ€์˜ ๋ฒ”์œ„์ด๊ธฐ ๋•Œ๋ฌธ์— 2๊ฐ€์ง€ ์กฐ๊ฑด์ด ํ•„์š”ํ–ˆ๋‹ค.

 

- item์˜ ๊ณ ์œ ๊ฐ’์ธ id๋กœ ๋น„๊ต๊ฐ€ ํ•„์š”.

- item(๊ฐ์ฒด)์„ ๋ฒ—์–ด๋‚œ ๋น„๊ต๋Œ€์ƒ์ด ํ•„์š”.

์ด๋กœ์จ, ๋ฐ์ดํ„ฐ๋Š”

๊ฐ์ฒด์˜ ๊ณ ์œ ๊ฐ’์ธ id์™€ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ๊ฐˆ ๊ฒƒ์ด๊ณ ,

๋น„๊ตํ•˜๋Š” ๋ฐ์ดํ„ฐ(ItItemPlayList)์˜ ์ฒซ๋ฒˆ์งธ id์˜ ๊ฐ์ฒด๋ฅผ filter ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค

 

 

 


 

 ์ตœ์ข… ์ •๋ฆฌ 

  1. react-query ์‚ฌ์šฉ ์‹œ ๋ณ„์นญ์„ ๋ถ™์—ฌ ๋ฐ์ดํ„ฐ์˜ ๋ชฉ์ ์„ ์ •ํ™•ํ•˜๊ฒŒ ๋ช…์‹œ.
  2. ๋ฐฐ์—ด ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ ์‹œ ๋ฐ์ดํ„ฐ์˜ ๊ตฌ์กฐ๋ฅผ ์ž˜ ์‚ดํŽด์•ผ ํ•œ๋‹ค(์˜ค๋ฅ˜ ๋ฐœ์ƒ >> ํ•ด๊ฒฐ).
  3. modal ์—๋Š” prop์œผ๋กœ ํด๋ฆญํ•œ video ID ๊ฐ’ ์ „๋‹ฌ
  4. ๋ชจ๋‹ฌ์ด ์ƒ๊ธธ ๋•Œ ์ „๋‹ฌ๋ฐ›์€ video ID ๊ฐ’์„ ํ™œ์šฉํ•ด iframe src ๋ณ€ํ™”