티스토리 뷰

유튜브 Data API(v3)를 활용한 비디오 렌더링

video_list.js

import React from 'react'; 
import VideoListItem from './video_list_item';

const VideoList = ({videos, onVideoSelect}) => {
    const videoItems = videos.map((video) => {
    return (
        <VideoListItem 
            onVideoSelect={onVideoSelect}
            key={video.etag} 
            video={video}/>
        )
    })
    return (
        <ul className = "col-md-4 list-group">
            {videoItems}
        </ul>
    )
}

export default VideoList;
  • 비디오 리스트 컴포넌트 구조
    • 함수형 컴포넌트
    • 스테이트가 필요없기 때문에 함수형 컴포넌트이다. 비디오 리시트 컴포넌트의 특이한 점은 VideoListItem으로 각 아이템을 보내기 위한 중간 역할을 한다는 것이다.
    • videoItems라는 함수를 리턴문 전에 정의했는데, 이는 전달받은 각 비디오들(배열)을 하나씩 VideoListItem으로 패스하기 위한 것이다. 그래서 map을 사용했으며, 특정 비디오를 셀렉하여 이를 스테이트 업데이트하는 onVideoSelect함수를 패스하고, 각 비디오를 패스했다. (key는 다른 포스팅에서 설명했다)
    • 그리고 리턴문 안에서 videoItems를 리턴하여 위의 기능들을 수행한다. list-group은 리스트 레이아웃을 만들기 위한 부트스트랩 예약어! (부트스트랩 홈페이지)

 

video_list_item.js

import React from 'react'; 

const VideoListItem = ({video, onVideoSelect}) => {
    const imageUrl = video.snippet.thumbnails.default.url;
    return (
        <li onClick ={()=>onVideoSelect(video)} 
            className="list-group-item">
            <div className="video-list media">
                <div className="media-left">
                    <img className="media object" src={imageUrl} />
                </div>
                <div className="media-body">
                        <div className="media-heading">{video.snippet.title}</div>
                </div>
            </div>
        </li>
    )
}

export default VideoListItem; 
  • 비디오 리스트 아이템 컴포넌트 구조
    • 리스트에 표시될 각 아이템들의 컴포넌트이다.
    • 부트스트랩 예약어인 list-group-item이 쓰였다.
    • 각 리스트를 클릭하면 그것이 selectedVideo로 업데이트될 수 있도록 이벤트핸들러 onClick ={()=>onVideoSelect(video)} 가 쓰였다.
    • 부트스트랩의 media 예약어가 사용되었다! (부트스트랩 홈페이지)

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함