나는 훌륭한 백엔드 개발자가 될 예정이지만 원활한 협업을 위해서라도 기본적인 프론트엔드 지식은 필요하다고 생각한다.
감사히도 이전 직장에서 3개월간 혹독하게 갈려나가며 여러 프로젝트를 수행했고,,
그 과정에서 퍼블리싱 되어있는 jsp에 javascript로 Ajax를 통한 비동기 서버 통신과 응답 데이터에 따라 DOM을 조작하는 함수들을 만들며 프론트엔드 경험을 해보았다.
하지만 소위 말하는 프론트엔드 프레임워크 3대장(React, Vue, Angular)에 대한 지식이 하나도 없었기 때문에 “저 프론트엔드도 조금은 할 줄 알아요"라는 말을 하기가 부끄러웠다. 그래서 지난 2월부터 조금씩 Vue.js를 공부중이다!
Vue.js를 선택한 이유 중 하나는 세 프레임워크 중 빠르게 배워서 빠르게 적용하기 가장 쉬워보였기 때문이다.
Vue.js가 익숙해지고, 나도 더욱 유능한 백엔드 개발자가 된다면 이후에 React도 건드려보고 싶다!
아무튼 본론으로 돌아와서 이 포스팅은 Vue.js를 조금씩 공부하며 정리한 기본적인 문법이다.
아직도 vue.js에 대해 공부하는 중이므로 새로운 문법에 대해서는 이 포스팅에 덧붙이며 이어 나갈 생각이다.
<template>
<h4 :style="h4Style" :class="h4Class"> 키</h4>
<p> {{ height }}cm </p>
</template>
<script>
export default {
name : 'App',
data(){
return {
height : 160,
h4Style : "color : blue",
h4Class : "newh4",
}
}
}
</script>
<template>
<div class="menu" v-for="data in menuNames" :key="data">
<h3>{{ data }}</h3>
</div>
<div class="menu" v-for="(data, i) in menuNames" :key="data">
<h3>{{ menuNames[i] }}</h3>
</div>
</template>
<script>
export default {
name : 'App',
data(){
return {
menuNames : [Burger, Pizza, Pasta, Fried Chicken],
}
}
}
</script>
<template>
<div class="menu" v-for="(el, i) in menuNames" :key="i">
<h3>{{ el }}</h3>
<button @click="likeCnt[i]++">like : {{ likeCnt[i] }}<button>
<button @click="increaseLikeCnt(i)">like : {{ likeCnt[i] }}<button>
</div>
</template>
<script>
export default {
name : 'App',
data(){
return {
menuNames : [Burger, Pizza, Pasta, Fried Chicken],
likeCnt = [0, 0, 0, 0],
}
},
methods : {
increaseLikeCnt(i) {
this.likeCnt[i]++;
alert('Thank you!');
}
}
}
</script>
<div class="newModal" v-if="modalStatus">
<h3>모달</h3>
<p> 모달 페이지 입니다. </p>
</div>
<div>
<button @click="modalStatus = true">모달 열기 버튼<button>
</div>
<script>
export default {
name : 'App',
data(){
return {
modalStatus : false,
},
}
}
</script>
(store.js)
let orange = 15;
export default orange
(App.vue)
<script>
import orange from'./store.js'
export default {
name : "app",
data(){
return {
dataFromStore : orange,
}
},
}
</script>
(store.js)
let orange = 15;
let banana= 4;
export { orange, banana }
(App.vue)
<script>
import { orange, banana } from'./store.js'
export default {
name : "app",
data(){
return {
orange : orange,
banana : banana,
}
},
}
</script>
(store.js)
export default [
{
id : 0,
name : "oragne",
price : 15
}, {
id : 1,
name : "banana",
price : 7
},
];
(App.vue)
<script>
import fruitsData from'./store.js'
export default {
name : "app",
data(){
return {
fruitsData,
}
}
}
</script>
html 반복을 피하고 재사용성을 극대화하기 위해 단위별로 분리한 것.
(ComponentPractice.vue)
<template>
<h4> 제목 </h4>
<p> 내용 </p>
</template>
<script>
export default {
name: "componentPractice",
}
</script>
(App.vue)
<template>
<component>
</component>
혹은
<component/>
<template/>
<script>
import component from './ComponentPractice.vue'
export default{
data(){
},
components : {
component,
},
}
</script>
과도한 컴포넌트 사용은 오히려 코드가 복잡해질 수 있다.
부모 컴포넌트가 자식 컴포넌트에 데이터를 보내는 문법
(App.vue)
<template>
<component :dataObj="data" :dataNumber="2" dataString="abcd" />
//data(){}에 선언되어 있는 경우에는 데이터의 변수명을 입력
//선언되어 있지 않은 경우 데이터의 값
//선언되어 있지 않은 String 타입일 경우 :없이 사용 가능
</template>
<script>
import component from './Component.vue'
export default{
data(){
return(){
data : { title : "제목", content : "내용" },
}
},
components : {
component,
},
}
</script>
(ComponentPractice.vue)
<template>
<h4> {{ dataObj.id }} </h4>
<p> {{ dataObj.content }} </p>
<p> {{ dataNumber }}</p>
<p> {{ dataString}}</p>
</template>
<script>
export default {
name: "componentPractice",
}, props : {
dataObj : Object,
dataNumber : Number,
dataString : String,
}
</script>