검색
검색
공개 노트 검색
회원가입로그인

react modal 밖을 눌렀을 때 modal 창 닫기 (useRef 버전)

rect modal의 바깥 창을 눌렀을 때 닫히게 하는 방법이다. wrapper 를 사용하는 방법이 있고 ref 를 사용하는 방법이 있는데 ref를 사용했다.

import { useState, useRef, useEffect } from "react";

const MyComponent = () => {
  const [actionModal, setActionModal] = useState(false);
  const node = useRef();

  useEffect(() => {
    const clickOutside = (e) => {
      // 모달이 열려 있고 모달의 바깥쪽을 눌렀을 때 창 닫기
      if (actionModal && node.current && !node.current.contains(e.target)) {
        setActionModal(false);
      }
    };

    document.addEventListener("mousedown", clickOutside);

    return () => {
      // Cleanup the event listener
      document.removeEventListener("mousedown", clickOutside);
    };
  }, [actionModal]);

  return (<div ref={node}>
    <div
      className="flex shrink-0 pointer"
      onClick={() => setActionModal((pre) => !pre)}
    >
      <img src="/images/more_horiz_black_24dp.svg" />
    </div>
    {actionModal ? (
      <div
        style={{
          position: "fixed",
          backgroundColor: "white",
          padding: "0.625rem",
          border: "1px solid grey",
          zIndex: 10,
          borderRadius: "4px",
        }}
      >
        <div className="p-10">action sheet</div>
        <div className="p-10">action sheet</div>
        <div className="p-10">action sheet</div>
      </div>
    ) : null}
  </div>)
}

export default MyModal;
공유하기
카카오로 공유하기
페이스북 공유하기
트위터로 공유하기
url 복사하기
조회수 : 3498
heart
T
페이지 기반 대답
AI Chat