안녕하세요
youtube playlist로 노래 플레이어 만들기 본문
[렌더링할 데이터 불러오기]
1. App을 실행하면 노래 정보를 불러와 reducer에 저장합니다.
2. 노래 정보를 useSelector로 불러오고 이를 저장할 state를 만듭니다.
const singerData = useSelector((state) => state.songs);
3. 노래를 담은 배열을 생성합니다.
const allSongs = singerData
=> 저는 복수의 플레이리스트로부터 받아왔기 때문에 .flat()함수로 노래 배열을 1차원 배열로 만들었습니다.
4. singerData를 useSelector로 불러오면 노래배열을 playlist state에 저장합니다.
// useSelector로 데이터를 불러오면 모든 노래 playlist에 저장하기
=> singerData는 1회만 불러오기 때문에 component가 동작을 하는 최초 1회만 실행됩니다.
이것으로 노래 데이터를 렌더링하기 위한 준비는 끝입니다.
[React-Player로 기능 구현하기]
5. 렌더링할 플레이리스트와 현재 재생중인 노래를 담을 state를 만듭니다.
const [showList, setShowList] = useState([]);
6. playlist 배열 안에 요소가 존재하면 재생할 노래와, 렌더링용 플레이리스트에 저장합니다.
=> playlist 또한 데이터를 바꾸지 않고 showList를 통해서 렌더링 할 것이기 때문에 1회만 실행됩니다.
7. ReactPlayer를 설치합니다. 편하게 youtube 동영상을 다룰 수 있습니다.
$ npm i react-player
8. 현재 재생중인 영상: 재생할 노래 state가 있다면 보여주도록 합니다.
<div className="current-song">
=> onEnded 프로퍼티는 현재 재생중인 영상이 끝나면 수행할 동작을 지정할 수 있습니다.
9. 연속재생, 반복재생: onEnded 프로퍼티에 handleEnded 함수를 전달합니다.
const handleEnded = () => {
=> handleEnded 함수는 재생할 영상의 정보를 담은 배열에 indexOf 메서드를 활용하여 다음 인덱스의 영상을 재생합니다.
show.List.length 로 나눈 나머지를 통해 마지막 곡까지 재생이 끝났다면 첫번째 곡으로 되돌아가 반복재생을 할 수 있습니다.
10. 재생목록 셔플
const handleClickShuffle = () => {
// ......
=> sort 메서드와 random 함수를 이용하여 순서를 무작위로 섞습니다.
복사된 배열을 sort() 메소드를 사용해 정렬합니다.
sort() 메소드에 인자로 함수를 전달하면 배열의 요소를 정렬하는데 사용할 기준을 정할 수 있습니다.
Math.random() 함수를 사용하여 무작위 숫자를 생성한 후 0.5를 뺀 값을 반환합니다.
이렇게 반환된 숫자가 음수이면 요소의 순서를 바꿉니다. 따라서 배열이 무작위로 섞이게 됩니다.
정렬된 배열을 shuffledList 변수에 할당합니다.
이제 shuffledList 배열은 showList 배열의 복사본이며, 요소들이 무작위로 섞이게 됩니다.
11. 플레이리스트의 각 항목을 클릭하여 현재 재생중인 영상을 바꿉니다.
'유튜브컨텐츠탐색-StelLife' 카테고리의 다른 글
scrollIntoView: ref로 선택된 목록이 화면에 들어오도록 스크롤 이동하기 (0) | 2023.03.15 |
---|---|
youtube playlist로 만든 노래 플레이어에 필터 기능 구현하기 (0) | 2023.03.14 |
Locking: 동시성 제어, 여러 프로세스가 DB의 데이터를 동시에 수정하려 할 때 (0) | 2023.03.12 |
이벤트 버블링 막기: event.stopPropagation() (0) | 2023.03.11 |
filter 기능 구현: 할 때 목록을 state로 만들 필요는 없다. (0) | 2023.03.11 |