Реагировать на избыточное приложение, запускающее одну функцию глобально - PullRequest
0 голосов
/ 30 марта 2020

Я пытаюсь определить, что браузер или вкладка закрыта. Как лучше всего запустить одну функцию во всем большом приложении?

window.onbeforeunload = function () {
    return "Do you want to close?";
};

1 Ответ

0 голосов
/ 30 марта 2020

вы можете использовать ответный хук и реализовать его в своем приложении. js. Я называю это useBeforeUnload: D

import { useEffect } from 'react'

const useBeforeUnload = (
  value: ((evt: BeforeUnloadEvent) => any) | string
) => {
  const handleBeforeunload = (evt: BeforeUnloadEvent) => {
    let returnValue
    if (typeof value === 'function') {
      returnValue = value(evt)
    } else {
      returnValue = value
    }
    if (returnValue) {
      evt.preventDefault()
      evt.returnValue = returnValue
    }
    return returnValue
  }

  useEffect(() => {
    window.addEventListener('beforeunload', handleBeforeunload)
    return () => window.removeEventListener('beforeunload', handleBeforeunload)
  }, [])
}

export default useBeforeUnload
...