UseBeforLeave

기본적으로 탭을 닫았을 때, 실행되는 페이지이다.

const useBeforeLeave = (onBefore) => {
  if (typeof onBefore !== "function") {
    return;
  }

  const handle = (event) => {
    const { clientY } = event;

    if (clientY <= 0) {
      onBefore();
    }
  };
  useEffect(() => {
    document.addEventListener("mouseleave", handle);
    return () => document.removeEventListener("mouseleave", handle);
  }, []);
};

const App = () => {
  const begForLife = () => console.log("don't leave");
  useBeforeLeave(begForLife);
  return (
    <div className="App">
      <h1>Hello</h1>
    </div>
  );
};
if (clientY <= 0) {
      onBefore();
    }
  };

const begForLife = () => console.log("don't leave");

마우스가 위로 벗어난경우에 argument 함수가 실행돼서 “don’t leave”가 console에 뜬다.

const handle = (event) => { 에서 console.log로 event결과를 확인하면, 마우스가 위로 벗어나면 음수. 아래로 벗어나면 양수가 나온다.(clientY가)

useEffect(() => {
  document.addEventListener("mouseleave", handle);
  return () => document.removeEventListener("mouseleave", handle);
}, []);

componentWillUnmount일 때 remove해준다.