안녕하세요, 개발자 Sean입니다.
오늘은 드래그 앤 드롭 작업도중 이상한 문제가 발생해 원인과 해결방법에 대해 기록하려고 합니다.
드래그 앤 드롭 컴포넌트에 :hover 가상 선택자로 스타일 변경 코드를 적용하고 드래그 앤 드롭으로 순서를 변경하는 컴포넌트를 만들었습니다. 그런데 아래 사진과 같이 순서가 바뀌고 기존에 선택했던 칸에 새 컴포넌트가 들어가면 :hover 가상 선택자가 발동하는 현상이 나타났습니다.
문득 마우스의 포지션 변화가 없어 이런 문제가 발생하는지 궁금해 아래와 같이 현재 커서의 위치를 로그로 찍어보았습니다.
useEffect(() => {
const handleMouseMove = (event) => {
setMousePos({ x: event.clientX, y: event.clientY });
};
window.addEventListener('mousemove', handleMouseMove);
return () => {
window.removeEventListener(
'mousemove',
handleMouseMove
);
};
}, []);
역시 드래그앤드랍을 하는 동안 마우스커서 위치에 변화가 나타나고 있지 않습니다.
추측이 맞다면, 드래깅 때 보이는 마우스 커서는 진짜 마우스 커서가 아니며 메모리상 실제 마우스는 드래그 앤 드롭을 발동한 그 자리에 머물러 있는 상태입니다. 따라서 다른 컴포넌트가 들어와도 :hover 이벤트가 발생하는 것입니다.

예상치 못했던 문제라 문제해결에 많은 시간이 남아있지 않은 상황이었습니다.
따라서 현실적으로 가장 빨리 문제를 해결할 수 있는 방법은 :hover 가상 선택자가 드래그앤드랍에서 드래그를 하는 컴포넌트일 경우에만 효과를 적용시키는 것이었습니다.
따라서 아래와 같이 스타일 코드를 변경했습니다.
${props => props.isHovering ?
`&:hover {
box-shadow: 0 3px 6px 0 rgba(0, 0, 0, 0.16);
background-color: white;
border-radius: 8px;
transform: scale(1.015);
color: black;
}`
:
''
}
'Front-End' 카테고리의 다른 글
[FE] s3 버켓으로부터 csv 파일 다운로드 받기 (0) | 2023.06.09 |
---|---|
[UI] Chakra와 Storybook 연동하기 (0) | 2023.04.17 |
[DragNDrop] 드래그 도중 커서 변경 (0) | 2023.03.21 |
[DragNDrop] 드래그 도중 커서 변경 (0) | 2023.03.16 |
[Firebase] Auth undefined 문제 해결방법 (0) | 2023.03.15 |