Skip to content

[REFACTOR] 세션 필터 상태 구조 개선 #249

@shionpark

Description

@shionpark

설명

멘토링(12/28) 피드백을 반영하여 필터 로직을 리팩토링 합니다.

멘토링에서 다뤘던 주제

  1. 상태 관리를 어디서, 뭘로? → SSOT
    • 선택된 (페이지에 보여줘야하는) 상태: search param
    • 모달에서 선택 중인 상태: draft + temp
  2. 중첩된 객체의 업데이트: 업데이트 했지만 참조값이 변하지 않음
    • immer 사용 또는 직접 뎁스별 복사 (깊은 복사)

작업 상세 내용

  • temp-* -> draft 기반으로 수정 (SSOT)
// FilterModal.tsx 내부 아래 로직 제거
  // const [tempRegion, setTempRegion] = useState(draft.region);
  // const [tempDate, setTempDate] = useState(draft.date);
  // const [tempTime, setTempTime] = useState(draft.time);
  // const [tempLevel, setTempLevel] = useState(draft.level);

기타

  const handleToggle = (sido: string, sigungu: string, checked: boolean) => {
    setDraft((prev) => { // immer
      const currentList = prev?.[sido] || [];
      const newList = checked
        ? [...currentList, sigungu] // deep copy
        : currentList.filter((i) => i !== sigungu);
// ...

참고

Metadata

Metadata

Assignees

Labels

refactoring코드가 내부적으로 작동하는 방식을 변경합니다. Cleanup과는 다릅니다.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions