가수면
[Vue] Composition API 방식 본문
바뀐 부분
상태값 = data() {} → ref(초기 상태값) // 상태값 가져오려면 .value로 가져와야함
함수 = methods → 그냥 선언
마운트 시 = mounted() {} → onMounted(() => {});
<script setup lang="ts">
import { ref, onMounted } from "vue";
let count = ref(0); // 상태변수 초기값(state)
let title = "Hello Vue";
onMounted(() => {
console.log("mounted");
});
const increaseCount = () => {
count.value++; // 상태값 가져오려면 .value로 가져와야함
};
</script>
컴포넌트 import
그냥 스크립트에 import
<script setup lang="ts">
import { ref, onMounted, watch } from "vue";
import ChildComp from "./components/ChildComp.vue";
...
</script>
Props
const props = defineProps({});로 props 정의
<ChildComp :color="color" bgColor="yellow" />
//
<template>
<div>
<h2 style="title">Child Component</h2>
<p
:style="{
color,
backgroundColor: bgColor,
}"
>
{{ color }}
</p>
</div>
</template>
<script setup lang="ts">
const props = defineProps({
color: String,
bgColor: String,
});
console.log(props.color);
</script>
<style scoped></style>
const emits = defineEmits(["onSearchCity"]);
@click="emits('onSearchCity', inputText)"
상위 컴포넌트로 onSearchCity라는 이벤트 전달, inputText는 전달된 값
<button @click="emits('onSearchCity', inputText)">
<font-awesome-icon class="icon" :icon="['fas', 'magnifying-glass']" />
</button>
...
<script setup lang="ts">
import { ref } from "vue";
const inputText = ref("");
const emits = defineEmits(["onSearchCity"]);
</script>
watch =
검사할 변수명(변경값, 이전값) {
로직
}
→
watch(검사할 변수명, () => {
로직
});
양방향 바인딩
v-model과 defineModel을 사용해 보일러플레이트를 개선할 수 있음
<script setup>
import { ref } from 'vue';
import Comp from './Comp.vue';
let title = ref('title')
</script>
<template>
<h1>{{ title }}</h1>
<Comp v-model="title" />
</template>
<script setup>
import { ref } from 'vue'
const model = defineModel();
</script>
<template>
<h2>{{ model }}</h2>
<p>inputText: {{ model}}</p>
<input
type="text"
v-model="model"
/>
</template>
Ref와 Reactive의 차이점
- ref -
원시/객체 타입
.value로 꺼낼 수 있음 (html에서 {{}}로 불러올 땐 .value 생략 가능)
- reactive -
객체 타입
.으로 바로 속성 접근 가능
<script setup>
import { ref, reactive } from 'vue';
const count = ref(0);
const str = ref('hello');
const obj = ref({name: "kwon"});
const reactive_obj = reactive({name: "kwon"});
console.log('ref_obj', obj.value.name);
console.log(reactive_obj.name);
</script>
<template>
<h1>Ref & Reactive</h1>
<p>{{ count }}</p>
<p>{{ str }}</p>
<p>obj(ref): {{ obj.name }}</p>
<p>reactive_obj: {{ reactive_obj.name }}</p>
</template>
'Vue' 카테고리의 다른 글
Vuetify 컴포넌트 자식 요소의 스타일 커스텀하는 방법 (0) | 2024.08.26 |
---|---|
[Vue] 심화 (0) | 2024.05.25 |
[Vue] 전역 상태 관리 (0) | 2024.05.16 |
[Vue] Router (0) | 2024.05.16 |
[Vue] 기본 (0) | 2024.05.13 |
Comments