1. ์ฃผ๋ง ์์ ์์ธํ์ด์ง ์ฑ๋ ์ ๋ณด ๋ฃ๊ธฐ
๊ฐ์ฌ๋์ด ๋ณด๋ด์ค api ์ฃผ์ :
1) api.js
export function channelUrl(channelId){
return `https://youtube.googleapis.com/youtube/v3/channels?part=statistics&part=snippet&id=${channelId}=${API_KEY}`
}
→ channelId๋ฅผ ๋งค๊ฐ๋ณ์๋ก url ํ๋ export
2) VideoItem
- api ์ฃผ์ ์ ๋ณด์ snippet์์ channelId๊ฐ ์์์ ๊ทธ๊ฑธ ๊บผ๋ด์ ์ฟผ๋ฆฌ๊ฐ์ผ๋ก ๋๊ฒจ์ค ๊ฒ์
- navigate(`/watch?id=${id}&channelId=${item.channelId}`) ๋ก ์์ → id ๋ ๋น๋์ค ์์ด๋, channelId ๋ ๋ด๊ฐ ์ ํํ ๋น๋์ค์ ์ฑ๋ ์์ด๋๊ฐ ๋ค์ด๊ฐ๋๋ก
3) VideoView
- {id} ๋ฅผ props ๋ก ๋ฐ์์ค ๊ฒ์ฒ๋ผ ์์ ์ปดํฌ๋ํธ์ธ Watch ์์ channelId ๋ ์ฟผ๋ฆฌ๊ฐ ๋ฐ์์ฃผ๊ธฐ
4) Watch
- const channelId=query.get('channelId') ์ถ๊ฐ
- <VideoView id={id} channelId={channelId} /> → channelId={channelId} ์ถ๊ฐํด์ VideoView ์ ๋ด๋ ค์ฃผ๊ธฐ
5) VideoView
- props channelId ์ถ๊ฐ
- import { channelUrl } from '../../lib/api'; → ์ฑ๋ ์ ๋ณด ๋ฐ์์ฌ api url import
- ์ ๋ณด ๋ฐ์์ store ์ ์ ์ฅํด์ ์ธ ๊ฒ์
6) store > videoSlice
export const getChannelInfo = createAsyncThunk(
"GET_CHANNEL_LIST",
async(url)=>{
try{
const res=await axios.get(url)
return res.data.items
}catch(err){
console.log(err)
}
}
)
→ getChannelInfo ๋ผ๋ ๋ญ ํ๋ ๋ ์ถ๊ฐ????
- initialState ์ channel ์ด๊ธฐ๊ฐ์ผ๋ก '' ๋น์คํธ๋ง ์ถ๊ฐ
builder.addCase(getChannelInfo.fulfilled,(state,action)=>{
console.log('๋น๋์ค์ฑ๋์ ๋ณด', action.payload)
state.channel=action.payload;
})
→ extraReducers ์ ์ถ๊ฐ
7) VideoView
import { getChannelInfo } from '../../store/video/videoSlice';
import { useSelector, useDispatch } from 'react-redux/es/exports';
const dispatch = useDispatch();
useEffect(()=>{
const channelIdInfo = channelUrl(channelId)
dispatch(getChannelInfo(channelIdInfo))
},[])
→ ??????
- const {channel} =useSelector((state)=>state.channel) ์ถ๊ฐ
- return ์์ ์ฑ๋ ์ ๋ณด ๋ค์ด๊ฐ ๊ณณ์
{
channel && (
<div className='descriptionContainer'>
<div className='channel-img'>
<img src={channel[0].snippet.thumbnails.default.url} alt="" />
</div>
<div className='channel-data'>
<h3 className='channel-title'>
{channel[0].snippet.title}
</h3>
<p className='channel-des'>
{channel[0].snippet.description}
</p>
</div>
</div>
)
}
→ ๊ฐ ์ ๋ณด ๋ฃ์ด์ ๋งํฌ์
useEffect(()=>{
const channelIdInfo = channelUrl(channelId)
dispatch(getChannelInfo(channelIdInfo))
},[channelId, dispatch])
→ ์์กด ์ก์์ค์ผ ์์ธํ์ด์ง ๋ชฉ๋ก์ ํด๋ฆญํด๋ ์ฑ๋์ ๋ณด๊ฐ ๋ง๊ฒ ๋ธ
→ ๋์์ ํ๋จ์ ์ฑ๋ ์ ๋ณด๊ฐ ๋ง๊ฒ ๋ธ ์์ฑ! (์คํ์ผ๋ง์ ์์์)
2. ๋น๋ฉ??? ์ต์ ํ??? !!!๋ค์!!!
1) ์ค์น
- npm run build
- build ํด๋๊ฐ ์๊ฒผ์ ๊ฒ์
- ๋น๋ฉ๋ ๊ฑธ ๋ก์ปฌ์์ ๋ณด๋ ค๋ฉด? : npm ์ฌ์ดํธ ๊ฐ๋ณด๋ฉด ์๋ฒ๊ฐ ์์ด์ ์๋ฒ๋ฅผ ํ๋ ์ค์นํด์ผํจ, npm install -g serve
- ์๋ฒ ์คํ์ํค๋ ๋ฐฉ๋ฒ? serve -s build
- npm start ๋ ๊ฐ๋ฐ์ ๋ชจ๋, ๋น๋๋ ๋ฐฐํฌ?
- ๋ํ๋ก์ด ๋ฐฐํฌ?
- git ์ ๋จผ์ ์ฌ๋ฆฌ๊ธฐ
- netlify????
- heroku?????: Config Vars ์ ํ๊ฒฝ๋ณ์ ์ค์ , ํค๋ ๋ฐธ๋ฅ ๋ฃ๊ธฐ .env ์ ํด์ค ๊ฒ ๋ณต๋ถ
์ปค๋ฅํธ ๊ฐ์ ๊น์ด๋ ์ฐ๊ฒฐ ํ์ธํ๊ณ ๋ํ๋ก์ด ํด๋ฆญ,
'๐ฑ SeSac > ๊ณต๋ถ ๊ธฐ๋ก (๋ณต์ตํ๋ฉฐ ์ ๋ฐ์ดํธ ์ค)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[220726] ์ฌ๋ฌ๊ฐ์ง ๊ฐ๋ฐ ํ (2) | 2022.09.15 |
---|---|
[220722] ์ ํ๋ธ ํด๋ก ์ฝ๋ฉ 4 (0) | 2022.09.15 |
[220721] ์ ํ๋ธ ํด๋ก ์ฝ๋ฉ 3 (0) | 2022.09.15 |
[220720~220721] ์ ํ๋ธ ํด๋ก ์ฝ๋ฉ 2 (0) | 2022.09.15 |
[220718] ์ ํ๋ธ ํด๋ก ์ฝ๋ฉ 1 (1) | 2022.09.15 |