λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

μΉ΄ν…Œκ³ λ¦¬ μ—†μŒ

[Vue.js] <script setup>

<script setup> 은 μ‹±κΈ€ 파일 μ»΄ν¬λ„ŒνŠΈ(SFC) λ‚΄μ—μ„œ Composition API λ₯Ό 더 μ‰½κ²Œ μ½κ±°λ‚˜ μ‚¬μš©ν•˜κΈ° μœ„ν•œ 컴파일 νƒ€μž„ 문법.

 

<script> 문법과 λΉ„κ΅ν•œ μž₯점

  • 더 κ°„κ²°ν•œ μ½”λ“œ
  • 순수 typescript λ₯Ό μ‚¬μš©ν•˜μ—¬ props 및 emit 이벀트λ₯Ό μ„ μ–Έν•˜λŠ” κΈ°λŠ₯
  • 더 λ‚˜μ€ λŸ°νƒ€μž„ μ„±λŠ₯ => template 은 쀑간 ν”„λ‘μ‹œ 없이 λ™μΌν•œ λ²”μœ„μ˜ λ Œλ”ν•¨μˆ˜λ‘œ 컴파일 됨
  • 더 λ‚˜μ€ IDE νƒ€μž… μΆ”λ‘  μ„±λŠ₯ => μ–Έμ–΄ μ„œλ²„κ°€ μ½”λ“œμ—μ„œ νƒ€μž…μ„ μΆ”μΆœν•˜λŠ” μž‘μ—… κ°μ†Œ

 


κΈ°λ³Έ 문법

 

# script 블둝에 setup 속성 μΆ”κ°€

<script setup>
	console.log('vue.js')
</script>

 

 πŸ”Ž  <script> μ»΄ν¬λ„ŒνŠΈλ₯Ό 처음 κ°€μ Έμ˜¬ λ•Œ ν•œλ²ˆλ§Œ μ‹€ν–‰ λ˜λŠ” μ½”λ“œ </script>

<script setup >μ»΄ν¬λ„ŒνŠΈμ˜ μΈμŠ€ν„΄μŠ€κ°€ 생성될 λ•Œλ§ˆλ‹€ μ‹€ν–‰λ˜λŠ” μ½”λ“œ </script>

 

 

 

 

 

# ν…œν”Œλ¦Ώμ— λ…ΈμΆœλ˜λŠ” μ΅œμƒμœ„ 바인딩

내뢀에 μ„ μ–Έλœ λͺ¨λ“  μ΅œμƒμœ„ 바인딩(λ³€μˆ˜, ν•¨μˆ˜ μ„ μ–Έ, import) 은 ν…œν”Œλ¦Ώμ—μ„œ 직접 μ‚¬μš©ν•  수 μžˆλ‹€.

<script setup>
//import ν•¨μˆ˜
import { capitalize } from './helpers'

//λ³€μˆ˜
const msg = 'hi';

//ν•¨μˆ˜
function log() {
	console.log(msg)
}

</script>

<template>
	<div>{{ capitalize('hello') }}</div>
    <button @click="log">{{ msg }}</button>
</template>

 

 

 

 

# λ°˜μ‘ν˜•

ν…œν”Œλ¦Ώμ—μ„œ 참쑰될 λ•Œ ref λŠ” μžλ™μœΌλ‘œ μ–Έλž˜ν•‘

<script setup>
import { ref } from 'vue'

const count = ref(0)
</script>

<template>
  <!-- ν…œν”Œλ¦Ώμ—μ„œ refλŠ” μ–Έλž˜ν•‘λ˜μ–΄ .value 없이 μ ‘κ·Ό κ°€λŠ₯ -->
  <button @click="count++">{{ count }}</button>
</template>

 

 

 

 

 

# defineProps() & defineEmits()

<script setup>
const props = defineProps({
  foo: String
})

const emit = defineEmits(['change', 'delete'])
// ... setup μ½”λ“œ
</script>

 πŸ”Ž defineProps 및 defineEmits λŠ” <script setup> λ‚΄μ—μ„œλ§Œ μ‚¬μš©ν•  수 μžˆλŠ” 컴파일러 맀크둜 이닀.

import ν•  ν•„μš” μ—†μœΌλ©°, <script setup> 이 처리될 λ•Œ 컴파일 λœλ‹€.

- μ „λ‹¬λœ μ˜΅μ…˜μ„ 기반으둜 μ μ ˆν•œ νƒ€μž… 좔둠을 제곡

728x90
λ°˜μ‘ν˜•