From a6ed2ca4c5a07beb5f60c4593ebef768759d1868 Mon Sep 17 00:00:00 2001 From: hun Date: Thu, 12 Feb 2026 22:05:57 +0900 Subject: [PATCH 1/2] =?UTF-8?q?design:=20=EA=B8=B0=EA=B8=B0=20=EA=B2=80?= =?UTF-8?q?=EC=83=89=20=ED=8E=98=EC=9D=B4=EC=A7=80,=20=EC=A0=9C=ED=92=88?= =?UTF-8?q?=EC=97=90=20=EC=9B=90=ED=99=94=20=EA=B8=B0=ED=98=B8=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/ProductCard/ProductCard.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/ProductCard/ProductCard.tsx b/src/components/ProductCard/ProductCard.tsx index 21761a9..33f071c 100644 --- a/src/components/ProductCard/ProductCard.tsx +++ b/src/components/ProductCard/ProductCard.tsx @@ -34,7 +34,7 @@ const ProductCard: React.FC = ({ product, onClick }) => { {/* Price */}

- {(product.price ?? 0).toLocaleString()} + ₩ {(product.price ?? 0).toLocaleString()}

{/* Color Chips */} From 48d6371290f3b8fa923ff100b1e65f0cef290a04 Mon Sep 17 00:00:00 2001 From: hun Date: Thu, 12 Feb 2026 22:25:49 +0900 Subject: [PATCH 2/2] =?UTF-8?q?fix:=20=EA=B8=B0=EA=B8=B0=20=EC=83=81?= =?UTF-8?q?=EC=84=B8=EB=AA=A8=EB=8B=AC=EC=97=90=EC=84=9C=20=EB=AA=A8?= =?UTF-8?q?=EB=8B=AC=EC=9D=B4=20=EA=BA=BC=EC=A7=88=EA=B2=BD=EC=9A=B0=20?= =?UTF-8?q?=EC=8A=A4=ED=81=AC=EB=A1=A4=20=EC=95=88=20=EB=90=98=EB=8A=94=20?= =?UTF-8?q?=EC=9D=B4=EC=8A=88=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/devices/DeviceSearchPage.tsx | 35 ++++++++++++++++---------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/src/pages/devices/DeviceSearchPage.tsx b/src/pages/devices/DeviceSearchPage.tsx index 76798bd..f8f05c4 100644 --- a/src/pages/devices/DeviceSearchPage.tsx +++ b/src/pages/devices/DeviceSearchPage.tsx @@ -1,4 +1,4 @@ -import { useRef } from 'react'; +import { useRef, useLayoutEffect } from 'react'; import { useSearchParams } from 'react-router-dom'; import GNB from '@/components/Home/GNB'; import ProductCard from '@/components/ProductCard/ProductCard'; @@ -22,7 +22,6 @@ import { mapSearchDeviceToProduct } from '@/utils/mapSearchDevice'; import { useDeviceSearch } from '@/hooks/useDeviceSearch'; import { useScrollState } from '@/hooks/useScrollState'; import { useAddToCombination } from '@/hooks/useAddToCombination'; -import { useEffect } from 'react'; const DeviceSearchPage = () => { const [searchParams, setSearchParams] = useSearchParams(); @@ -46,27 +45,37 @@ const DeviceSearchPage = () => { selectedDeviceType: selectedDevice?.deviceType ?? null, selectedDeviceName: selectedDevice?.name ?? null, onCloseModal: () => { - searchParams.delete('productId'); - setSearchParams(searchParams); + // 새로운 URLSearchParams 객체 생성하여 React가 변경 감지하도록 함 + setSearchParams((prev) => { + const newParams = new URLSearchParams(prev); + newParams.delete('productId'); + return newParams; + }); }, }); /* 모달 열림 상태 확인 및 스크롤 잠금 (회색 배경이 보일 때와 동일한 조건) */ const isModalOpen = (!!selectedProduct && !combo.showSaveCompleteModal) || combo.showSaveCompleteModal; - useEffect(() => { - if (isModalOpen) { - document.documentElement.style.overflow = 'hidden'; - document.body.style.overflow = 'hidden'; - } else { + /* selectedProductId가 null이 될 때 명시적으로 스크롤 unlock */ + useLayoutEffect(() => { + if (selectedProductId === null) { document.documentElement.style.overflow = ''; document.body.style.overflow = ''; } + }, [selectedProductId]); - return () => { - document.documentElement.style.overflow = ''; - document.body.style.overflow = ''; - }; + /* 모달 열림 상태에 따른 스크롤 lock */ + useLayoutEffect(() => { + if (isModalOpen) { + document.documentElement.style.overflow = 'hidden'; + document.body.style.overflow = 'hidden'; + + return () => { + document.documentElement.style.overflow = ''; + document.body.style.overflow = ''; + }; + } }, [isModalOpen]); return (