🙀fix: useEvent 중복 호출되던 문제

- initEvent() 함수 중복 호출로 이벤트 바인딩 중복 되던 문제 해결
- 초기화 함수 호출 최소화
- useEffect 호출 정리
This commit is contained in:
yoosangwook 2024-12-03 13:18:43 +09:00
parent 4aae0bccb3
commit 58c2c3cfc9
5 changed files with 38 additions and 12 deletions

View File

@ -3,20 +3,17 @@
import FloorPlanProvider from './FloorPlanProvider' import FloorPlanProvider from './FloorPlanProvider'
import FloorPlan from '@/components/floor-plan/FloorPlan' import FloorPlan from '@/components/floor-plan/FloorPlan'
import CanvasLayout from '@/components/floor-plan/CanvasLayout' import CanvasLayout from '@/components/floor-plan/CanvasLayout'
import EventProvider from './EventProvider'
export default function FloorPlanLayout({ children }) { export default function FloorPlanLayout({ children }) {
console.log('🚀 ~ FloorPlanLayout ~ FloorPlanLayout:') console.log('🚀 ~ FloorPlanLayout ~ FloorPlanLayout:')
return ( return (
<> <>
<EventProvider> <FloorPlanProvider>
<FloorPlanProvider> <FloorPlan>
<FloorPlan> <CanvasLayout>{children}</CanvasLayout>
<CanvasLayout>{children}</CanvasLayout> </FloorPlan>
</FloorPlan> </FloorPlanProvider>
</FloorPlanProvider>
</EventProvider>
</> </>
) )
} }

View File

@ -3,11 +3,13 @@ import { useCanvasSetting } from '@/hooks/option/useCanvasSetting'
import { useMessage } from '@/hooks/useMessage' import { useMessage } from '@/hooks/useMessage'
import { POLYGON_TYPE } from '@/common/common' import { POLYGON_TYPE } from '@/common/common'
import { setSurfaceShapePattern } from '@/util/canvas-util' import { setSurfaceShapePattern } from '@/util/canvas-util'
import { useEvent } from '@/hooks/useEvent'
export default function FirstOption() { export default function FirstOption() {
const { getMessage } = useMessage() const { getMessage } = useMessage()
const { canvas, settingModalFirstOptions, setSettingModalFirstOptions } = useCanvasSetting() const { canvas, settingModalFirstOptions, setSettingModalFirstOptions } = useCanvasSetting()
const { option1, option2, dimensionDisplay } = settingModalFirstOptions const { option1, option2, dimensionDisplay } = settingModalFirstOptions
const { initEvent } = useEvent()
// //
useEffect(() => { useEffect(() => {
@ -42,6 +44,11 @@ export default function FirstOption() {
setSettingModalFirstOptions({ ...settingModalFirstOptions, option1, option2, dimensionDisplay, fontFlag: true }) setSettingModalFirstOptions({ ...settingModalFirstOptions, option1, option2, dimensionDisplay, fontFlag: true })
} }
// useEffect(() => {
// console.log('🚀 ~ useEffect ~ initEvent:')
// initEvent()
// }, [onClickOption])
return ( return (
<> <>
<div className="modal-check-btn-wrap"> <div className="modal-check-btn-wrap">

View File

@ -9,6 +9,7 @@ import { usePopup } from '@/hooks/usePopup'
import { v4 as uuidv4 } from 'uuid' import { v4 as uuidv4 } from 'uuid'
import DotLineGrid from '@/components/floor-plan/modal/grid/DotLineGrid' import DotLineGrid from '@/components/floor-plan/modal/grid/DotLineGrid'
import { useCanvasSetting } from '@/hooks/option/useCanvasSetting' import { useCanvasSetting } from '@/hooks/option/useCanvasSetting'
import { useEvent } from '@/hooks/useEvent'
export default function GridOption() { export default function GridOption() {
const [gridOptions, setGridOptions] = useRecoilState(settingModalGridOptionsState) const [gridOptions, setGridOptions] = useRecoilState(settingModalGridOptionsState)
@ -24,6 +25,8 @@ export default function GridOption() {
const { gridColor, setGridColor, color } = useCanvasSetting() const { gridColor, setGridColor, color } = useCanvasSetting()
const { initEvent } = useEvent()
useEffect(() => { useEffect(() => {
console.log(gridColor, color) console.log(gridColor, color)
setGridColor(color.hex) setGridColor(color.hex)
@ -91,6 +94,11 @@ export default function GridOption() {
setGridOptions(newGridOptions) setGridOptions(newGridOptions)
} }
useEffect(() => {
console.log('🚀 ~ useEffect ~ initEvent:')
initEvent()
}, [gridOptions])
const dotLineGridProps = { const dotLineGridProps = {
id: dotLineId, id: dotLineId,
setIsShow: setShowDotLineGridModal, setIsShow: setShowDotLineGridModal,

View File

@ -8,6 +8,7 @@ import PlanSizeSetting from '@/components/floor-plan/modal/setting01/planSize/Pl
import { useCanvasSetting } from '@/hooks/option/useCanvasSetting' import { useCanvasSetting } from '@/hooks/option/useCanvasSetting'
import { useRecoilState, useRecoilValue } from 'recoil' import { useRecoilState, useRecoilValue } from 'recoil'
import { fontSelector, globalFontAtom } from '@/store/fontAtom' import { fontSelector, globalFontAtom } from '@/store/fontAtom'
import { useEvent } from '@/hooks/useEvent'
export default function SecondOption() { export default function SecondOption() {
const { getMessage } = useMessage() const { getMessage } = useMessage()
@ -24,6 +25,8 @@ export default function SecondOption() {
const [fontId, setFontId] = useState(uuidv4()) const [fontId, setFontId] = useState(uuidv4())
const [planSizeId, setPlanSizeId] = useState(uuidv4()) const [planSizeId, setPlanSizeId] = useState(uuidv4())
const { initEvent } = useEvent()
const { const {
fetchSettings, fetchSettings,
planSizeSettingMode, planSizeSettingMode,
@ -189,6 +192,11 @@ export default function SecondOption() {
setAdsorptionRange(50) setAdsorptionRange(50)
} }
useEffect(() => {
console.log('🚀 ~ useEffect ~ initEvent:')
initEvent()
}, [adsorptionPointMode])
return ( return (
<> <>
<div className="modal-check-btn-wrap"> <div className="modal-check-btn-wrap">

View File

@ -1,4 +1,4 @@
import { useCallback, useEffect, useRef } from 'react' import { useRef } from 'react'
import { useRecoilValue, useSetRecoilState } from 'recoil' import { useRecoilValue, useSetRecoilState } from 'recoil'
import { canvasState, canvasZoomState, currentMenuState, textModeState } from '@/store/canvasAtom' import { canvasState, canvasZoomState, currentMenuState, textModeState } from '@/store/canvasAtom'
import { fabric } from 'fabric' import { fabric } from 'fabric'
@ -20,9 +20,15 @@ export function useEvent() {
const textMode = useRecoilValue(textModeState) const textMode = useRecoilValue(textModeState)
useEffect(() => { // 이벤트 초기화 위치 수정 -> useCanvasSetting에서 세팅값 불러오고 나서 초기화 함수 호출
initEvent() // useEffect(() => {
}, [currentMenu, canvas, adsorptionPointAddMode, adsorptionPointMode, adsorptionRange, dotLineGridSetting, tempGridMode]) // initEvent()
// }, [currentMenu, canvas, adsorptionPointAddMode, adsorptionPointMode, adsorptionRange, dotLineGridSetting])
// 임시 그리드 모드 변경 시 이벤트 초기화 호출 위치 수정 -> GridOption 컴포넌트에서 임시 그리드 모드 변경 시 이벤트 초기화 함수 호출
// useEffect(() => {
// initEvent()
// }, [tempGridMode])
const initEvent = () => { const initEvent = () => {
if (!canvas) { if (!canvas) {