Project: Develife - main ๊ตฌ์ฑ๊ณผ React-Query ์ ์ฉ
๐ฏ๋ชฉ์ :
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 ํ ์ ์๊ฒ ๋์๋ค
์ต์ข ์ ๋ฆฌ
- react-query ์ฌ์ฉ ์ ๋ณ์นญ์ ๋ถ์ฌ ๋ฐ์ดํฐ์ ๋ชฉ์ ์ ์ ํํ๊ฒ ๋ช ์.
- ๋ฐฐ์ด ๋ฉ์๋ ์ฌ์ฉ ์ ๋ฐ์ดํฐ์ ๊ตฌ์กฐ๋ฅผ ์ ์ดํด์ผ ํ๋ค(์ค๋ฅ ๋ฐ์ >> ํด๊ฒฐ).
- modal ์๋ prop์ผ๋ก ํด๋ฆญํ video ID ๊ฐ ์ ๋ฌ
- ๋ชจ๋ฌ์ด ์๊ธธ ๋ ์ ๋ฌ๋ฐ์ video ID ๊ฐ์ ํ์ฉํด iframe src ๋ณํ