마크업에 적는
템플릿 스크립트

요소에 h-scope 를 적으면 거기서부터 스코프입니다. 그 안의 속성이 값과 화면을 묶습니다. 빌드 없이 스크립트 한 줄로 시작합니다.

Vue 를 써 봤다면 이미 읽을 수 있습니다.

표현은 Vue 그대로이고 프리픽스만 h- 입니다. 반응성은 Vue 의 핵심 라이브러리(@vue/reactivity)를 그대로 씁니다. 컴포넌트 파일도 빌드도 없이 마크업에 바로 적습니다.

관련 속성 h-model h-for h-show @click

선언하지 않아도 됩니다. 쓰는 순간 생깁니다.

값을 미리 적어 둘 필요가 없습니다. 서버가 랜더링해 보낸 입력값이 그대로 처음 값이 됩니다. 글자의 {{ }} 는 h-text-inline 을 붙인 요소의 바로 아래에서만 읽습니다. 여기서는 버튼입니다.

관련 속성 h-scope h-model :disabled h-text-inline

스코프는 경계입니다. 받을 것은 적어서 받습니다.

안쪽 스코프는 바깥 값을 저절로 보지 않습니다. 내려 줄 것은 h-provide 로, 받을 것은 h-inject 로 적습니다. 조각을 어디에 끼워도 무엇에 기대는지가 마크업에 보입니다.

관련 속성 h-provide h-inject h-inherit

언제 사용 하나요

hyper-scope 는 서버가 랜더링한 화면에 동작을 얹는 도구입니다.

이런 곳에 맞습니다

  • 화면을 서버가 랜더링합니다 ERB · Hono/JSX · JSP · Jinja — 어떤 템플릿 언어든 HTML 에 동작을 얹습니다
  • Vue 의 표현이 손에 익었습니다 @click · :class · h-for 를 그대로 씁니다
  • 마크업이 무엇에 기대는지 마크업에 보입니다 HTML 에서 떠나 JS 를 번갈아 보지 않도록 도움을 줍니다
  • 번들링을 두고 싶지 않습니다 스크립트 한 줄로 시작하고 마크업에 바로 적습니다

이런 곳에는 맞지 않습니다

  • 스크립트 위주로 로직을 짭니다 HTML 자체가 데이터이고 그 위에서 동작하는 라이브러리입니다
  • SPA 를 기대합니다 전통적인 웹 환경을 확장하는 라이브러리입니다
  • CSP 가 unsafe-eval 을 허용하지 않습니다 보안이 중요한 프로젝트는 이 구성이 허용되지 않을 수 있습니다
  • 타입 검사와 단위 테스트가 중요합니다 마크업 속 글자라서 타입 검사기와 테스트 도구가 닿지 않습니다

단순하게.

가볍게.

서버가 랜더링한 HTML 위에.

화면은 서버가 랜더링하고, 브라우저는 거기에 동작만 얹습니다. 나중에 끼워진 조각도 스코프가 붙어 있으면 스스로 살아납니다. 외울 것은 속성 22개, 프로퍼티 12개, 함수 2개가 전부입니다.

프리뷰

Vue 나 Alpine 을 써 봤다면 아래 표와 예제 몇 개로 충분합니다. 속성 22개, 프로퍼티 12개, 함수 2개가 전부이고, 하나씩의 설명은 문서에 있습니다.

하는 일VueAlpinehyper-scope
값을 두는 곳data() · setup()x-datah-scope
글자{{ }} · v-textx-texth-text · h-text-inline
속성 · 이벤트:class · @click:class · @click:class · @click
입력v-modelx-modelh-model
조건 · 반복v-if · v-forx-if · x-forh-if · h-for
보이고 숨기기v-showx-showh-show
계산값computedgetterh-computed · getter
값이 바뀌면 할 일watchEffectx-effecth-effect
값 하나를 지켜보기watch$watch없습니다
요소 짚기refx-ref · $refsh-ref · $refs
위로 알리기$emit$dispatch$emit · $dispatch
아래로 내려 주기provide · inject바깥 x-data 가 보임h-provide · h-inject
서버 값 받기propsx-data 에 적기h-props (JSON)

익숙한 것과 다른 점 셋

값을 두는 곳

h-scope 가 스코프를 엽니다. 서버가 준 값은 h-props 로 받아 $props 로 읽기만 합니다. h-state 는 스코프 호스트를 만들지 않고 그 요소 안쪽에 별도의 리액티브한 값 공간을 만듭니다 — 줄마다 자기 값을 둘 때 씁니다.

→ h-scope · h-state · h-props

화면에 그리기

글자는 h-text, 글자 사이에 끼울 때는 h-text-inline 과 {{ }}. 속성은 :, 보이고 숨기기는 h-show, 넣고 빼기는 <template h-if>, 되풀이는 h-for 입니다.

→ h-text 부터 h-for 까지

입력과 이벤트

h-model 이 입력과 값을 맞추고, @ 가 이벤트를 듣습니다. 수식어(.prevent · .trim)는 Vue 와 같습니다. 요소는 h-ref 로 이름 붙여 $refs 로 짚습니다.

→ h-model · h-on · h-ref

스코프 사이

내려 줄 것은 h-provide, 받을 것은 h-inject 로 적습니다. 받은 이름은 읽기 전용입니다. 받은 객체의 속은 바꿀 수 있고, 값 자체를 갈아야 하면 $emit 으로 준 쪽에 요청합니다.

→ h-provide · h-inject · h-inherit

계산값과 할 일

h-computed:이름 은 그 요소 안쪽에서 읽는 계산값입니다. h-effect 는 읽은 값이 바뀔 때마다 다시 돕니다. 수식어를 붙이면 값이 아니라 때를 따릅니다 — .mounted · .unmounted · .sealed.

→ h-computed · h-effect

서버가 다시 그려도

서버가 조각을 새로 보내도 h-keep 이 입력하던 값을 잇습니다. h-cloak 은 살아나기 전까지 숨기고, h-await 는 비동기 작업의 상태에 따라 보이며, h-pre 안쪽은 건드리지 않습니다.

→ h-keep · h-cloak · h-await · h-pre

스크립트에서 부르는 것

함수는 둘입니다. start() 가 문서의 스코프를 살리고, plugin() 이 이름 · 속성 · 컴포넌트를 더합니다. 폼 검증 $v 와 turbo-frame 손잡이 $tf 도 플러그인입니다.

→ 확장