• 한국어
  • 2.x
  • 이벤트 처리

    useYouTubeEvent는 reactive state 구독과 callback 기반 side effect를 모두 지원합니다.

    1. state 방식

    const playbackRate = useYouTubeEvent(player, 'playbackRateChange', 1);
    const isMuted = useYouTubeEvent(player, 'muteChange', false);
    const progress = useYouTubeEvent(player, 'progress', 1000);

    2. callback 방식

    useYouTubeEvent(player, 'ready', (playerInfo) => {
      console.log('ready', playerInfo);
    });
    
    useYouTubeEvent(player, 'error', (error) => {
      console.error(error);
    });
    
    useYouTubeEvent(player, 'autoplayBlocked', () => {
      console.log('autoplay blocked');
    });

    callback dependency array

    callback가 바뀌는 값에 의존한다면 네 번째 인자로 dependency array를 전달하세요.

    useYouTubeEvent(
      player,
      'stateChange',
      (state) => {
        console.log('state', state, analyticsLabel);
      },
      [analyticsLabel],
    );

    이벤트 목록

    이벤트payload설명
    readyPlayerInfo첫 전체 플레이어 스냅샷
    stateChangePlayerStateUNSTARTED, PLAYING, PAUSED, BUFFERING, ENDED, CUED
    errorYoutubeErrorYouTube 또는 bridge 레벨 에러
    progressProgressDatacurrentTime, duration, percentage, loadedFraction
    playbackRateChangenumber현재 재생 속도
    playbackQualityChangePlaybackQuality현재 화질
    autoplayBlockedundefined브라우저/플랫폼 autoplay 제한
    muteChangeboolean현재 음소거 상태

    ready payload

    ready에서는 아래 같은 초기 정보를 받을 수 있습니다.

    • availablePlaybackRates
    • availableQualityLevels
    • currentTime
    • duration
    • muted
    • playbackQuality
    • playbackRate
    • playerState
    • size
    • volume

    progress payload

    {
      currentTime: number;
      duration: number;
      percentage: number;
      loadedFraction: number;
    }

    progress interval 동작

    • 세 번째 인자는 밀리초 단위 interval
    • 기본값은 1000
    • interval 기반 업데이트가 필요 없으면 0
    const progress = useYouTubeEvent(player, 'progress', 500);

    seekTo() 이후에도 progress가 한 번 더 빠르게 갱신되어 UI가 바로 따라오도록 설계되어 있습니다.

    mute tracking 주의점

    muteChange를 구독할 때만 muted tracking이 활성화됩니다.