배경
react-dnd는 drag 시작 시에 item의 최신 상태는 잘 추적하지만, drop시에는 최신 상태를 추적하지 못한다.
이로 인해, 다음과 같은 코드를 작동하면 버그가 발생한다.
1. 상태 초기화
2. 상태 업데이트
3. 드랍 시 업데이트된 상태를 바탕으로 상태 업데이트 코드 실행
4. 버그 발생
즉, 드랍 전 상태를 업데이트 한 후 드랍했을 때 최신 상태를 바탕으로 다시 상태를 업데이트 하는 코드가 있다면 버그를 발생시킨다.
(필자는 업데이트했던 상태가 이전 상태로 초기화되는 버그를 경험했다.)
따라서, drop 내 콜백 함수 에서는 직접 최신 상태를 추적해야 한다.
예시 코드
  // hooks
  const [{ isOver }, drop] = useDrop(() => ({
    accept: "BOX",
    drop: async (card?: CardType) => {
      if (!card) return;
      // 스토어에서 최신 상태값 가져오기
      const latestCard = useKanbanBoardStore.getState().cards.find((c) => c.id === card.id) || card;
      // 최신 상태값을 바탕으로 상태 업데이트
      await useKanbanBoardStore.getState().editCard(card.id, { ...latestCard, columnName });
    },
    collect: (monitor) => ({
      isOver: monitor.isOver(),
    }),
  }));'라이브러리' 카테고리의 다른 글
| OpenAI API(GPT) 사용법 (0) | 2025.03.30 | 
|---|---|
| [react-swiper] 스와이퍼 범위가 무한히 늘어나는 버그 | 스크롤바가 무한히 늘어나는 원인 및 해결방법 (0) | 2025.02.23 | 
| [styled-components] Next.js 15 + styled-components 전역 스타일 설정 방법 | 테마 설정 방법 | 테마, (0) | 2025.02.12 | 
| [Swiper] 리액트 스와이퍼 자동 재생 특정 횟수에서 멈추기 (0) | 2025.01.14 | 
| [Notistack] 알림 스택 라이브러리 notistack 사용방법 (0) | 2025.01.06 |