Stimulus 컨트롤러 간 통신을 위한 Dispatch 활용

Using Dispatch to communicate between Stimulus Controllers

작성자
발행일
2025년 07월 23일

핵심 요약

  • 1 Stimulus의 dispatch 기능은 여러 컨트롤러 간의 UI 상호작용을 간결하게 처리하며, JavaScript의 이벤트 디스패칭을 추상화합니다.
  • 2 data-action 속성과 사용자 정의 이벤트를 통해 main 및 aside 영역의 체크박스 상태를 id 기반으로 동기화하는 예시를 제공합니다.
  • 3 컨트롤러 스코프 외부에서 이벤트를 수신하기 위해 event_name@window->controller#action 형식을 사용하며, detail 객체로 필요한 데이터를 전달합니다.

도입

Stimulus의 dispatch 기능은 복수의 Stimulus 컨트롤러가 필요한 UI 상호작용을 효과적으로 관리하기 위한 핵심 도구입니다. 이 기능은 JavaScript의 기본 이벤트 디스패칭 메커니즘을 Stimulus 환경에 맞춰 간소화하여 개발자가 더욱 직관적으로 컨트롤러 간 통신을 구현할 수 있도록 돕습니다. 본 글에서는 저자가 개발한 작업 관리 앱인 Masterlist의 사례를 통해 dispatch가 어떻게 여러 컨트롤러 간의 상태 동기화를 이끌어내는지 구체적인 예시와 함께 설명합니다. 특히, 사용자 클릭에 반응하여 이벤트를 발생시키고, 이를 수신하는 다른 컨트롤러가 상태를 업데이트하는 과정을 다룹니다.

dispatch를 활용한 Stimulus 컨트롤러 간 통신은 HTML 구조와 JavaScript 컨트롤러 코드의 긴밀한 상호작용을 통해 이루어집니다.

HTML 구조 및 이벤트 설정

예제는 <main>과 <aside> 두 컨테이너에 각각 checkable Stimulus 컨트롤러가 연결된 체크박스들을 포함합니다. * 식별자: 모든 체크박스는 data-checkable-id-value 속성을 통해 고유 ID를 가지며, 이는 <main>과 <aside>의 동일 항목을 연결하는 역할을 합니다. * 이벤트 리스너: * <main>의 체크박스는 checkable:statusChanged@window->checkable#setStatus와 같이 사용자 정의 이벤트를 수신합니다. @window는 컨트롤러 스코프 외부 이벤트를 전역적으로 수신함을 의미합니다. * <aside>의 체크박스는 click->checkable#toggle 액션을 통해 click 이벤트를 처리합니다.

Stimulus 컨트롤러 (checkable_controller.js)

checkable_controller.js는 체크박스 간 통신을 담당하는 핵심 로직을 정의합니다. * 공유 값: static values = { id: Number }를 통해 <main>과 <aside> 체크박스 간 공유되는 id 값을 정의합니다. * setStatus(ev) 메서드: * checkable:statusChanged 이벤트를 수신할 때 실행됩니다. * ev.detail.id와 ev.detail.checked에서 이벤트 상세 정보를 추출합니다. * 수신된 id가 현재 컨트롤러의 idValue와 일치하는 경우에만 this.element.checked를 업데이트하여 해당 체크박스의 상태를 변경합니다. 이는 특정 체크박스만 반응하도록 하여 불필요한 동작을 방지합니다. * toggle(ev) 메서드: * <aside> 체크박스의 click 이벤트에 의해 호출됩니다. * this.idValue와 ev.target.checked를 포함하는 detail 객체를 생성합니다. * this.dispatch(‘statusChanged’, { detail: detail })을 호출하여 statusChanged 사용자 정의 이벤트를 발생시킵니다. 이때 detail 객체에 상태 정보를 담아 이벤트 리스너에게 전달하여, <main>의 체크박스가 자신의 상태를 동기화하도록 합니다.

이러한 구현을 통해 <aside>의 사용자 상호작용이 dispatch를 통해 이벤트를 발생시키고, <main>의 컨트롤러가 이를 수신하여 UI 상태를 효율적으로 동기화합니다.

결론

본 글에서 제시된 예시는 Stimulus dispatch 기능을 활용하여 여러 컨트롤러 간에 효율적으로 통신하는 방법을 명확하게 보여줍니다. data-action을 통한 이벤트 리스닝 설정, data-checkable-id-value를 이용한 요소 식별, 그리고 dispatch를 통한 사용자 정의 이벤트 발생 메커니즘은 복잡한 UI 상호작용을 간결하게 구현할 수 있는 강력한 패턴을 제공합니다. 특히, @window 접미사를 사용하여 컨트롤러 스코프를 넘어선 이벤트 수신이 가능하며, detail 객체를 통해 필요한 데이터를 유연하게 전달할 수 있다는 점은 Stimulus의 설계 철학인 간결함과 유연성을 잘 보여줍니다. 이처럼 Stimulus 컨트롤러는 최소한의 코드로도 강력한 기능을 발휘하여 웹 애플리케이션 개발을 더욱 효율적으로 만듭니다.

댓글 0

댓글 작성

0/1000
정중하고 건설적인 댓글을 작성해 주세요.

아직 댓글이 없습니다

첫 번째 댓글을 작성해보세요!