Alpine JS로 Textarea를 자동으로 확장하는 방법(+ 새 플러그인)
6803 단어 alpinejsjavascript
<textarea>
하도록 요청받을 가능성이 큽니다.이 기능을 만들 때 취할 수 있는 몇 가지 접근 방식이 있지만 가장 일반적인 것은 이와 유사한 JavaScript 함수입니다.
function textareaAutogrow() {
let el = event.currentTarget
el.style.height = 'auto'
el.style.height = `${el.scrollHeight}px`
}
간단하고 깨끗하며 사용하기 쉽습니다.
이것을 Alpine JS로 어떻게 번역합니까?
JavaScript 예제와 동일한 코드를 사용하지만 Alpine JS로 작성된 솔루션부터 시작하겠습니다.
기본 Alpine JS 예제
<textarea
x-data="{
resize: () => {
$el.style.height = 'auto';
$el.style.height = `${$el.scrollHeight}px`
}
}"
x-init="resize()"
@input="resize()"
></textarea>
무슨 일이야?
JavaScript 예제와 동일한 논리를 갖는
x-data
함수를 초기화하는 resize()
컨텍스트가 있습니다. 이 함수는 Alpine JS 구성 요소가 초기화될 때 호출되고 input
DOM 이벤트가 전달될 때마다 다시 호출됩니다.좋습니다. 이것은 작동하지만 JavaScript 예제의 세 상자를 체크합니까?
단순한
예. x-data 컨텍스트에서 함수 생성을 제외한 표준 Alpine JS입니다.
깨끗한
아니요. HTML에 추가 복잡성과 부풀림이 추가되어 빠르게 읽기가 훨씬 더 어려워집니다.
재사용 가능/쉬움
아니요. 그것은 DRY가 아니며 특히 상황이 자주 변경될 수 있는 HTML에서 사용하고 싶지 않은 것입니다.
Alpine JS 로직 추출 예제
방금 작성한 논리를 자체 Alpine JS 데이터 컨텍스트 함수로 추출해 보겠습니다. 다음과 같습니다.
<textarea x-data="grow"></textarea>
그리고 Alpine JS 지시문.
document.addEventListener('alpine:init', () => {
Alpine.data('grow', () => ({
init() {
this.resize()
this.$el.addEventListener('input', () => this.resize())
},
resize() {
this.$el.style.height = 'auto'
this.$el.style.height = `${this.$el.scrollHeight}px`
},
}))
})
이게 훨씬 좋아 보인다!
이 접근 방식으로 처리하면 기능을 반복해서 작성하지 않고도
x-data="grow"
를 추가할 수 있습니다. 그러나… 다음 예를 들어 보겠습니다.<textarea
x-data="{ valid: false, grow }"
:class="{ 'border-green-500': valid }"
></textarea>
여기에는 CSS 클래스 추가/제거를 처리하는
valid: false
가 있습니다.CSS가 작동합니까? 예.
자동 증가 기능이 작동합니까? 아니.
이 문제를 해결할 수 있는 방법이 있을 수 있지만 지금은 다른 솔루션이 있습니다.
Alpine JS 플러그인 예제
Alpine JS 지시문으로 이 기능을 처리하는 Alpine JS 플러그인Alpine JS Textarea Autogrow을 만들었습니다.
이것이 의미하는 바는 이 기능을 이와 같이 추가할 수 있다는 것입니다.
<textarea x-data x-grow></textarea>
여기서는 Alpine JS 구성 요소를 초기화하는 데 필요한
x-data
로 Alpine JS 구성 요소를 초기화합니다. 그런 다음 자동 성장 기능을 처리하기 위해 플러그인에서 제공하는 Alpine JS 지시문인 x-grow
를 사용합니다.후드 아래
x-grow
는 이 블로그 게시물의 시작 부분에 표시된 JavaScript 예제입니다."이런 용도로 플러그인을 사용하는 이유는 무엇입니까?"입니다. 좋은 질문입니다. 몇 가지 이유가 있습니다.
x-data
전체 사용 허용이 모든 예에는 사용 사례가 있지만 최선에서 최악의 접근 방식 목록을 작성한다면 그렇게 될 것입니다.
Reference
이 문제에 관하여(Alpine JS로 Textarea를 자동으로 확장하는 방법(+ 새 플러그인)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/markmead/how-to-autogrow-textarea-with-alpine-js-new-plugin-5l텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)