>source

반응 기능이 있습니다

<button onClick={(e) => this.playVideo(e, name)}>

두 옵션 모두 시도

playVideo(event, name) {
    console.log(event, 'event details');
    setTimeout(function () {
      console.log(event, 'event details inside timeout'); 
    }, 1500)
}

playVideo(event, name) {
    console.log(event, 'event details');
    setTimeout(function (event) {
      console.log(event, 'event details inside timeout'); 
    }, 1500)
}

위의 코드에서 초기 이벤트는 예상대로 작동하지만 settimout bcaz 내부의 이벤트 데이터가 필요합니다. 이벤트를 기반으로 js 파일을 몇 개로드해야하지만 settimeout 함수 내부의 이벤트 데이터는 항상 null입니다.

나는 또한 시도했다onClickCapture하지만 여전히 운이 없다

<button onClickCapture={(e) => this.playVideo(e, name)}>

  • 답변 # 1

    앞서서 React-v17 React에서 사용되는 Syntethic Event 래퍼로 인해 값이 범위 내에 있어야합니다.

    playVideo(event) => {
        const { currentTarget } = event;
        // closure on currentTarget won't lose due to synthetic event.
        setTimeout(() => {
          console.log(currentTarget, 'event details inside timeout'); 
        }, 1500)
    }
    
    

  • 답변 # 2

    매개 변수를 다음으로 전달할 수 있습니다. setTimeout 추가 매개 변수가있는 콜백 setTimeout . 그냥 추가 event 이후 매개 변수의 개체 }, 1500, event) 그리고 그것은에서 사용할 수 있습니다 callback .

    playVideo(event, name) {
        console.log(event, 'event details');
        setTimeout(function (event) {
          console.log(event, 'event details inside timeout'); 
        }, 1500, event) // <- Pass event object from here
    }
    
    

    <시간 />

    편집하다@Felix King의 의견에 따라 사용할 수 있습니다. event 부모 범위의 개체 playVideo 매개 변수를 제거하기 만하면 callback 아래와 같습니다.

    playVideo(event, name) {
        console.log(event, 'event details');
        setTimeout(function () { // <- Do no add event parameter so event object will be fetch from parent scope.
          console.log(event, 'event details inside timeout'); 
        }, 1500)
    }
    
    

  • 답변 # 3

    통과하지 마십시오 event 이 범위에서 지역 변수로 간주되기 때문에 settimeout 함수에 대한 매개 변수입니다.

관련 자료

  • 이전 javascript - 해당 제품이 변형 인 경우 각 제품의 변형 값을 반환하는 방법은 무엇입니까?
  • 다음 html - CSS 만 사용하여 확인란을 레이블과 정렬하는 방법