동적 입력 필드 레이블 복수형 처리를 위한 Stimulus 활용

Leveraging Hotwire for Dynamic Input Field Label Pluralization | Flagrant

작성자
발행일
2025년 09월 02일

핵심 요약

  • 1 Stimulus를 사용하여 숫자 입력에 따라 동적으로 단수/복수 레이블을 변경하는 방법을 설명합니다.
  • 2 Stimulus의 values와 targets 기능을 통해 HTML과 JavaScript 간의 데이터를 효율적으로 동기화합니다.
  • 3 사용자 입력 값에 따라 레이블 텍스트를 즉시 업데이트하여 문법적 정확성을 자동으로 보장합니다.

도입

동적 입력 필드에서 숫자를 입력할 때, "nights"와 같이 고정된 레이블이 "1 night"와 같은 단수 값에는 문법적으로 부적절한 문제점이 발생합니다. 본 글은 이러한 문제를 해결하기 위해 사용자 입력에 따라 레이블을 동적으로 조정하는 방법을 다룹니다. 특히 Ruby on Rails 애플리케이션 환경에서 Stimulus를 활용하여 이를 구현하는 과정을 상세히 설명하며, Stimulus의 values와 targets 개념을 통해 깔끔하고 재사용 가능한 코드 작성 방법을 제시합니다.

Stimulus 컨트롤러 설정

동적 레이블 처리를 위해 number_input_controller라는 Stimulus 컨트롤러를 생성합니다. 이 컨트롤러는 다음과 같은 정적 속성을 가집니다: * static values: singular (단수형)와 plural (복수형) 텍스트를 정의합니다. 각 값은 String 타입이며 기본값은 비어 있습니다. * static targets: numberText라는 하나의 타겟을 정의합니다. 이 타겟은 입력 필드 옆에 표시될 텍스트 요소를 가리킵니다.

컨트롤러를 HTML에 연결하기 위해 부모 div 요소에 data-controller="number-input" 속성을 추가합니다. numberText 타겟은 <div data-number-input-target="numberText"></div>와 같이 텍스트를 감싸는 div에 지정됩니다.

Stimulus Values를 이용한 데이터 전달

Stimulus의 values는 HTML 속성을 통해 JavaScript 컨트롤러에 데이터를 전달하고 자동으로 동기화하는 강력한 기능입니다. 이를 통해 “night”의 단수형과 복수형 정보를 컨트롤러에 전달할 수 있습니다. * this.singularValue, this.pluralValue와 같은 속성을 통해 값에 접근할 수 있습니다. * this.hasSingularValue 등으로 값의 존재 여부를 확인할 수 있습니다. * HTML 속성 변경 시 singularValueChanged()와 같은 특별한 메서드를 정의하여 반응할 수 있습니다.

단수 및 복수 값 설정

컨트롤러가 동적으로 타겟을 업데이트하는 데 사용할 단수 및 복수 값은 HTML 속성을 통해 정의됩니다. 예를 들어, 텍스트가 “night”일 경우 다음과 같이 설정합니다: * data-number-input-singular-value="<%= text %>" * data-number-input-plural-value="<%= text.pluralize %>" 여기서 <%= text.pluralize %>는 Ruby on Rails의 pluralize 헬퍼를 사용하여 복수형을 자동으로 생성합니다.

입력 필드 및 액션 추가

입력 필드와 상호작용할 때 레이블이 업데이트되도록 data-action 속성을 사용하여 Stimulus 액션을 연결합니다. 일반적인 입력 필드 예시는 다음과 같습니다: * <input data-action="number-input#updateNumberText" />

이 액션은 사용자가 입력 필드와 상호작용할 때마다 Stimulus 컨트롤러의 updateNumberText 메서드를 트리거합니다.

updateNumberText 메서드는 다음과 같이 구현됩니다: javascript updateNumberText(event) { this.numberTextTarget.textContent = event.target.value == 1 ? this.singularValue : this.pluralValue } 이 메서드는 입력 필드의 값(event.target.value)을 확인하여: * 값이 1이면 this.singularValue (예: “night”)를 사용합니다. * 그 외의 모든 값에 대해서는 this.pluralValue (예: “nights”)를 사용합니다. numberTextTargettextContent가 동적으로 업데이트되어 적절한 레이블을 반영합니다.

결론

사용자가 입력 필드와 상호작용할 때, Stimulus 컨트롤러는 입력 값을 즉시 받아 처리합니다. 이 값(1 또는 그 외의 숫자)에 따라 `numberTextTarget`에 해당하는 텍스트는 자동으로 단수형 또는 복수형으로 업데이트됩니다. 이로써 입력 필드 옆에 표시되는 텍스트가 문법적으로 정확하게 동적으로 변경됩니다. 이러한 설정은 깔끔하고 재사용 가능한 코드를 제공하며, 모든 종류의 단수/복수 텍스트를 유연하게 처리할 수 있게 합니다.

댓글 0

댓글 작성

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

아직 댓글이 없습니다

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