[Vue.js] 07 SFC(Single File Component)

2021. 9. 24. 09:25Study/Vue.js

반응형

Single File Component

  • 화면의 특정 영역에 대한 HTML, CSS, JS 코드를 한 파일에서 관리하는 방법
    • 전역 컴포넌트는 Vue.component를 사용해 정의되고, container 엘리먼트를 대상으로 하는 new Vue({el: '#container'})가 정의됐었다.
    • vue 확장자를 가진 파일을 모두 싱글 파일 컴포넌트라고 한다.
    • 뷰 로더에 의해 HTML, CSS, JS와 같은 웹 자원으로 분리되어 실행
  • 프론트엔드가 Javascript 기반인 경우 단점
    • 전역 정의 모든 구성 요소에 대해 고유한 이름을 지정하도록 강요.
    • 구문 강조가 약해 여러 줄로 된 HTML에 보기 안좋은 슬래시가 많이 필요

.Vue 확장자

  • 완전한 구문 강조
  • CommonJS 모듈
  • 컴포넌트에만 제한된 CSS
  • 각 *.vue 파일은 한번에 최대 하나의 template, script 블록과 여러개의 style 블록을 포함할 수 있다.
  • 관심사 분리
    • 현대적인 UI 개발에서 코드베이스를 서로 얽혀있는 세 개의 거대한 레이어로 나누는 대신, 느슨하게 결합 된 컴포넌트로 나누고 구성하는 것이 더 중요하다.
    • 템플릿, 로직 및 스타일이 본질적으로 결합되어 배치되면 컴포넌트의 응집력과 유지 보수성이 향상된다
//Test.vue
<template>

</template>

<script>
export default {
  name: "Test"
}
</script>

<style scoped>  // scoped or module

</style>

이벤트

  • 등록
  • 버블링
  • 캡쳐
  • 전파 방지

이벤트 등록

<button>add one item</button>
var button = document.querySelector('button');
button.addEventListener('click', addItem);

function addItem(event) {
    console.log(event);
}

이벤트 버블링

  • 특정 화면 요소에서 이벤트가 발생했을 때 해당 이벤트가 더 상위의 화면 요소들로 전달되어 가는 특성
  • 브라우저는 특정 화면 요소에서 이벤트가 발생했을 때 그 이벤트를 최상위에 있는 화면 요소까지 이벤트를 전파
<body>
    <div class="one">
	<div class="two">
	    <div class="three">
	    </div>
	</div>
    </div>
</body>
var divs = document.querySelectorAll('div');
divs.forEach(function(div) {
    div.addEventListener('click', logEvent);
});

function logEvent(event) {
    console.log(event.currentTarget.className);
}

 

이벤트 캡쳐

  • 이벤트 버블링과 반대 방향으로 진행되는 이벤트 전파 방식.
  • 이벤트가 발생했을 때 최상위 요소인 body 태그에서 해당 태그를 찾아 내려간다.
var divs = document.querySelectorAll('div');
divs.forEach(function(div) {
    div.addEventListener('click', logEvent, {
        capture: true // default 값은 false입니다.
    });
});

function logEvent(event) {
    console.log(event.currentTarget.className);
}

전파 방지

//javascript
function logEvent(event) {
	event.stopPropagation();
}

// vue(수식어사용)
<a v-on:click.stop="doThis"></a>

 

preventDefault() 와의 차이

  • e.preventDefault는 고유 동작을 중단시키고, e.stopPropagation 는 상위 엘리먼트들로의 이벤트 전파를 중단시킨다.
<a href="https://www.naver.com">Naver</a>
$("a").click(function(e){
	e.preventDefault();
	alert("e.preventDefault()");
});
반응형

'Study > Vue.js' 카테고리의 다른 글

[Vue.js] 11 Vuex Helper  (0) 2021.09.24
[Vue.js] 09 ES6  (0) 2021.09.24
[Vue.js] 05 Template  (0) 2021.09.23
[Vue.js] 03 Router  (0) 2021.09.23
[Vue.js] 02 Component  (0) 2021.09.23