마스터링 피닉스 라이브뷰 패칭: UI 재로딩 없이 상태 유지하는 네비게이션
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
- 대상자: Phoenix LiveView 기반 웹 애플리케이션 개발자
- 난이도: 중급 이상 (LiveView 상태 관리 및 URL 패칭 개념 이해 필요)
핵심 요약
- URL 패칭 시 상태 유지 방법:
mount/3
에서 한 번 초기화하고,handle_params/3
에서 필요한 경우만 상태 변경 - 라이브컴포넌트 활용:
live_component
또는render/2
구문으로 패칭 인식 컴포넌트 분리하여 상태 안정성 확보 - 트랜잭션 상태 분리:
temporary_assigns
및assign_new/3
사용으로 일시적/영구 상태 구분
섹션별 세부 요약
1. **URL 패칭 문제점**
push_patch
/live_patch
로 URL 변경 시, 자식 컴포넌트 재마운트 발생handle_params/3
호출 시 기본적으로 assigns 재초기화로 인한 입력 필드 사라짐- 예: 프로필 편집 중 탭 전환 시 임시 저장된 입력 값 손실
2. **상태 유지 전략**
mount/3
에서 영구 상태 초기화: 세션 토큰, 기본 리소스, 모드 설정handle_params/3
에서 최소한의 변경만 적용::section
,:tab
,:id
같은 URL 파라미터 반영- 트랜잭션 상태 분리:
temporary_assigns
로 일시적 상태(폼 데이터, 커서 위치 등) 관리
3. **라이브컴포넌트 활용 패턴**
- 패칭 인식 컴포넌트 분리:
live_component
로 구성하여 URL 변경 시 재마운트 방지 - 모달 예제: 카드 ID를 URL에 패치하고 모달 열기 시 보드 상태 유지
- 렌더링 최적화:
temporary_assigns
사용으로 메모리 누수 방지
4. **실무 팁 및 고려사항**
assign_new/3
활용: 값이 이미 설정된 경우 지연 할당으로 성능 향상- 패칭 이벤트 대응:
push_patch
를 리셋 신호가 아닌 상태 업데이트 신호로 인식 - UX 개선: 입력 필드 유지로 사용자 경험 향상 및 신뢰도 증가
결론
- 패칭 인식 인터페이스 구현 방법:
mount/3
에서 영구 상태 초기화,handle_params/3
에서 최소한의 변경,live_component
로 컴포넌트 분리 - 핵심 원칙:
push_patch
는 리셋이 아닌 상태 업데이트로 처리해야 하며, 트랜잭션 상태 분리 및 라이브컴포넌트 활용이 필수적 - 실무 적용: 복잡한 UI(탭, 모달, 편집기 등)에서 유동적 네비게이션을 위해 패칭 인식 설계를 반드시 적용해야 함