React!

React- 배경음악 재생하고 화면 벗어나면 음악 중지하기

개발따라김양 2023. 8. 9. 14:32

1. 문제 상황

배경 음악을 재생한 후 다른 페이지를 가도 음악이 계속 재생하고 있는 상황

 

2. 문제 해결

함수형 컴포넌트의 생애주기를 관리할 수 있는 훅인 useEffect의 return 문을 활용하고

addEventListener 로 만들어준 event를 return 문 안에서 removeEventListener를 사용해 줌

useEffect(() => {
    const audio = new Audio(playList);

    const timeUpdateHandler = () => {
      setCurrentTime(audio.currentTime);
      setRatio((audio.currentTime / audio.duration) * 100);
      if (audio.duration === audio.currentTime) {
        setPlaying(false);
      }
    };

    if (playing) {
      audio.play().then(() => {
        audio.addEventListener("timeupdate", timeUpdateHandler);
      });
    } else {
      audio.pause();
      audio.removeEventListener("timeupdate", timeUpdateHandler);
    }

    return () => {
      audio.pause();
      audio.removeEventListener("timeupdate", timeUpdateHandler);
    };
  }, [playing, playList, setPlaying]);