#1 Fragement
react에서는 컴포넌트가 여러 엘리먼트를 반환하는 것은 다들 알고 계실겁니다.
Fragments는 dom에 별도의 노드를 추가하지 않고 여러 자식을 그룹화 할 수 있습니다.
이 때, Fragments를 선언하는 shorts syntax가 있습니다. key 또는 attribute를 지원하지는 않지만 다른 엘리먼트처럼
<>
</>
이렇게 사용할 수 있습니다.
그러면 이걸 왜 설명하냐?
리액트로 개발을 하다보면 팝업 모달을 위해 작업을 하셨던 적이 많으실거라고 생각합니다.
이번 글에서는 팝업 모달창의 z-index 때문에 애를 먹었던 경험을 정리해보고자 합니다.
간단하게 설명드리면 z-index는 가상의 z축을 만들어 태그들에게 z축의 값을 줍니다. (z축 : 화면에서 수직을 이룬다.)
즉, 어떤 태그가 어떤 태그를 덮는지 순서를 정할 수 있습니다. 태그들이 보이는 순위를 정하는 것이라고 말하면 될 듯 하네요.
(화면을 바꾸기 위해 트그 순서를 바꾸는 것은 좋지 않기 때문에 z-index를 사용합니다.)
저는 어떠한 버튼을 클릭했을 때, 삭제 팝업 모달이 나오게끔 하는 기능을 구현하고 있었습니다.
팝업 구현까지는 어렵지 않게 할 수 있었는데, 팝업창이 뜨는 순간 이상현상이 발생했는데
이렇게 팝업창이 뜨면 순수 팝업창 이외에는 opacity 값을 줬는데도 불구하고 사진과 같은 현상이 일어나는 것입니다.
정말 애먹었습니다. 다양한 해결방법이 있을 수 있겠지만 저는 이런 현상을 겪어본적도 없어 원인 파악이 너무 어려웠습니다.
이 문제를 해결하고자 검색과 생각 끝에 z-index 문제가 제일 일리 있는 말 같아 z-index 값으로 해결하려고 했으나,
아무리 값을 올리고 수정해도 변화가 없었습니다. 나중에 알아보니 부모 자식간의 position:absolute가 적용되어 있는 경우는
자식의 z-index 값을 아무리 올려도 부모를 벗어나서 적용될 수 없다고 하더군요..그럼 결국엔 이것도 해결책이 될 수 없었습니다.
그래서 조언을 구한 결과 결국 원인을 찾았는데 바로 dim 범위의 문제였습니다. 부모 자식간의 연결되어 있는 dim의 범위 때문이였는데
이 문제를 해결하고자 빈 Fragments를 사용하여 부모영향을 받지 않는 곳으로 옮겨주어 해결하였습니다.
사실 이게 옳은 해결 방법인지 아닌지, 또는 더 좋은 해결방법이 있을 수도 있지만..적어도 고민의 결과에 대한 제 나름의 해결 방안이였습니다.
저 빈 Fragements를 사용해야겠다란 생각도 상당히 시간이 좀 걸렸던 것으로 기억합니다..
알면 알수록 다양한 문제들과 마주치겠지만 많은 경험과 시간들이 저에게 좀 더 나은 해결책을 줄 것이라 생각하며 이렇게 글을 작성해봅니다.
'React' 카테고리의 다른 글
useState로 여러개의 input 상태 관리하기 (0) | 2021.10.16 |
---|---|
url 변경 시, 페이지가 리렌더링 되지 않는 현상 (0) | 2021.10.03 |
useState Functional Updates (0) | 2021.06.19 |
useState로 컴포넌트 다루기 (0) | 2021.06.13 |
useState (0) | 2021.05.21 |