From 77de97eef10e78b6cb1836016016c935dbab533c Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Thu, 7 May 2026 15:53:08 +0900 Subject: [PATCH] =?UTF-8?q?=EC=A7=80=EB=B6=95=ED=98=95=EC=83=81=20?= =?UTF-8?q?=EC=84=A4=EC=A0=95=20=EC=8B=9C=20undo=20redo=20=EB=90=98?= =?UTF-8?q?=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/usePlan.js | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/hooks/usePlan.js b/src/hooks/usePlan.js index 77f5b9b7..00c480c8 100644 --- a/src/hooks/usePlan.js +++ b/src/hooks/usePlan.js @@ -1,6 +1,6 @@ 'use client' -import { useContext, useEffect, useState } from 'react' +import { useContext, useEffect, useRef, useState } from 'react' import { usePathname, useRouter } from 'next/navigation' import { useRecoilState, useResetRecoilState, useSetRecoilState } from 'recoil' @@ -475,13 +475,19 @@ export function usePlan(params = {}) { } } + // usePlan() 인스턴스가 새로 mount 될 때 clearStacks 가 실수로 호출되지 않도록 + // 직전 플랜 id 를 ref 로 보관하고, 실제 id 변경이 일어났을 때만 스택을 비운다. + const prevPlanIdRef = useRef(currentCanvasPlan?.id) useEffect(() => { setSelectedPlan(currentCanvasPlan) handleCurrentPlanUrl() // resetCurrentObject() resetModuleSetupSurface() - // 플랜 전환 시 이전 플랜의 undo/redo 히스토리는 의미가 없으므로 초기화한다. - clearStacks() + // 플랜 ID가 실제로 바뀐 경우에만 undo/redo 히스토리를 초기화한다. + if (prevPlanIdRef.current !== currentCanvasPlan?.id) { + clearStacks() + prevPlanIdRef.current = currentCanvasPlan?.id + } }, [currentCanvasPlan]) /**