본문 바로가기
Web/Vue.js

Vue.js 뷰 템플릿 정리 (5)

by 평범한 개발자... 2020. 5. 7.
Vue.js 뷰 템플릿 정리

1. 뷰 템플릿

  • 뷰 템플릿은 HTML, CSS 등의 마크업 속성과 뷰 인스턴스에서 정의한 데이터 및 로직들을 연결하여 사용자가 브라우저에서 볼 수 있는 형태의 HTML로 변환해주는 속성

    • 라이브러리 내부적으로, 가상 돔 기반의 render() 함수로변환
    • 변환된 render() 함수는 최종적으로 사용자 화면에 표시
    • 변환 과정에서 뷰의 반응성(Reactivity)이 화면에 더해짐
    • JSX 기반의 render() 함수에 더 익숙한 리액트 개발자라면 템플릿 속성을 이용하지 않아도 됨
  • 뷰 템플릿 사용 방법

    • ES5

    • ES6

       

  • 탬플릿 속성 사용 유무 비교 코드

    • 탬플릿 속성을 사용하지 않은 경우

      • h3태그가 먼저 화면에 표시되고, 뷰 인스턴스가 생성되면 message의 값을 Hello Vue.js!로 치환

    • 탬플릿 속성을 사용한 경우

      • <div id="app"> 태그에 아무런 내용이 없다가 인스턴스가 생성되면 <h3>태그가 화면에 표시

 

2. 데이터 바인딩 (Data Binding)

  • 데이터 바인딩은 HTML 화면 요소를 뷰 인스턴스의 데이터와 연결하는 것을 의미

  • 사용 문법

    • {{ message }}

      • 뷰뿐만 아니라 다른 언어나 프레임워크에서도 자주 사용되는 템플릿 문법

      • data속성의 message 값이 바뀌면 반응성에 의해 화면이 자동으로 갱신 됨

      • 뷰 데이터가 바뀌어도 갱신하고 싶지 않다면 v-once 속성 사용

         

    • v-bind 속성

      • id, class, style 등의 HTML 속성값에 뷰 데이터 값을 연결할 때 사용

      • v-bind:id 문법의 경우, :id로 간소화 가능하지만, 코드 가독성을 위해 간소화 하지 않은 것을 추천

        image

 

3. 자바스크립트 표현식

  • 뷰 템플릿에서 자바스크립트 표현식을 사용할 수 있음

    • {{ number + 1 }} 사칙연산 가능
    • {{ ok ? 'YES' : 'NO' }} 삼항 연산자 사용 가능
    • {{ message.split('').reverse().join('') }} 자바스크립트 API 호출 가능
    • v-bind:id="'list-' + id" 문자열 연산 가능

    image

  • 자바스크립트 연산식 주의해야할 점

    • {{ var a = 1 }} 변수 선언 불가능

    • {{ if (ok) { return message } }} 조건 식 불가능

    • {{ message.split('').reverse().join('') }} 과 같은 복잡한 연산은 인스턴스에서 수행해야 함

      • computed 속성을 이용하여 연산 (6번 항목에서 설명)

        • caching 기능
      • 화면단 코드는 UI 구조 파악을 위함, 연산 로직과 UI 코드는 분리되는 것이 좋음

 

4. 디렉티브

  • v- 접두사를 가지는 모든 속성을 의미

  • 디렉티브의 역할은 표현식에 따라서 반응적으로 DOM에 적용

  • 화면의 DOM 요소들을 쉽게 조작하기 위해 사용하는 기능

    • <p> 태그는 뷰 인스턴스의 flag 값에 따라서 삽입되거나 제거되어 보일 수도, 보이지 않을 수도 있음
디렉티브역할
v-if참, 거짓 여부에 따라 HTML 태그를 화면에 표시하거나 표시 하지 않음
v-for데이터의 갯수만큼 HTML 태그를 반복적으로 출력
v-showv-if와 유사, v-if는 실제 태그를 삭제하거나 삽입하지만,
v-show는 css 속성을 이용하여 실제 태그는 남아있고 화면상에서만 보이지 않음
(display:none 속성 이용)
v-bindHTML 태그의 기본 속성과 뷰 데이터 속성을 연결
v-on화면 요소의 이벤트 감지 및 처리 할 때 사용
ex) v-on:click은 해당 태그의 마우스 클릭 이벤트를 감지하여 특정 메소드를 실행
v-model폼(form)에서 주로 사용되는 속성
폼에 입력한 값을 뷰 인스턴스의 데이터와 즉시 동기화
입력된 값을 서버에 보내거나 watch와 같은 속성을 이용하여 추가 로직 수행
<input>, <select>, <textarea> 태그에서 만 사용 가능

 

5. 이벤트 처리 (v-on)

  • v-on을 이용한 클릭이벤트 예제

  • 기본 클릭 예제

image

 

 

  • 인자 전달 받기

    image

 

  • event 인자 접근

    • 클릭 이벤트의 경우, event 인자를 통해 클릭 위치 좌표 값을 얻을 수 있음

    image

 

  • 일반 인자, event인자 동시 접근

    image

 

6. 고급 템플릿 기법 (computed, watch)

6-1 computed 속성

  • 데이터를 가공하는 등의 복잡한 연산은 뷰 인스턴스 내에서 수행

  • 최종적으로 HTML에는 데이터만 표현해야 함

  • computed 속성을 이용하면 HTML단의 코드가 훨씬 깔끔해짐

  • 장점

    • computed속성에서 사용하고 있는 data 값이 변경되면 전체 값을 다시 한번 계산 함

    • 캐싱 (연산의 결과 값을 미리 저장하고 있다가 필요할 때 불러옴, 동일한 연산은 반복하지 않음)

       

  • computed 속성과 methods 속성의 차이점

    • methods 속성은 호출할 때만 로직이 수행 (수동)
    • computed 속성은 대상 데이터 값이 변경되면 자동 수행 (능동)

 

  • computed 속성 예제

    • 연산된 결과가 reversedMessage 에 저장이 되고, HTML에서 {{ reversedMessage }} 를 호출하면 저장된 값을 바로 불러옴
    • 만약 HTML에서 {{ reversedMessage }} 를 여러 곳에서 호출 한다면 연산을 하지 않고 저장된 값을 가져오기 때문에 성능 면에서 훨씬 효율적
    • 따라서 복잡한 연산을 반복 수행해서 화면에 표시해야 한다면 computed 속성을 이용하는 것이 좋음

    image

  • Vue 확장프로그램으로 message 값 변경 시, reversedMessage 값이 자동으로 바뀌는 것을 확인할 수 있음 image

    image

 

6.2 watch 속성

  • 데이터 변화를 감지하여 자동으로 특정 로직 수행
  • computed 속성은 자바스크립트 내장 API를 활용한 간단한 연산 정도에 적합한 반면, watch 속성은 REST API 호출과 같이 시간이 상대적으로 더 많이 소모되는 비동기 처리에 적합

 

6.3 computed 와 watch 속성의 차이

  • watch 속성은, ''데이터가 바뀌면 이런 함수를 실행하라!' 방식의 명령형 프로그래밍

  • computed 속성은, 계산이 필요한 목표 데이터를 정의하는 방식의 선언형 프로그래밍

    • 데이터를 정의하되, 원본 데이터가 바뀌면 동기화를 위해 로직 자동 수행

       

  • 차이 예제1

    • computed 속성의 경우, 캐싱 기능으로 속성 안에 연산 결과가 저장되는 반면, watch 속성은 그렇지 않음

  • 차이 예제2

    • watch 속성의 경우, 감지하고 있는 데이터를 직접 변경시키면 무한 루프가 발생 함

    • 실제로 무한 루프가 발생하는 것은 아니고, Vue가 위험성을 감지하고 사전에 Exception 처리

      image

    • 데이터 변화 감지 → watch 실행 → 데이터 변경 → 데이터 변화 감지 → watch 실행 → 데이터 변경 → 데이터 변화 감지 → watch 실행 → 데이터 변경 → 데이터 변화 감지 → watch 실행 → 데이터 변경 ...

    • data 속성안에 있는 데이터를 연산을 하거나 변경을 할 경우에는 computed 속성을 사용해야 함

    • 그래도 watch로 데이터를 변경하고 싶다면, 추가적으로 data를 선언해서 사용

      • message 값의 변화를 감지하여, 로직 수행 후 결과를 reversedMessage 변수에 저장
      • computed와 동작 방식은 거의 동일하겠으나, 사용 목적에 맞지 않음 (watch는 데이터를 정의할 때 사용 하는 것이 아니기 때문)

  • 결론

    • 데이터 변화 감지라는 점에 이 둘의 속성은 동일하지만 computed 속성은 데이터를 정의하여 선언적인 방식으로 사용하고, watch 속성은 데이터의 변화를 감지하여 특정 로직을 수행할 때 사용

 

[출처]

  1. https://vuejs.org/v2/guide/
  2. Vue.js 입문
반응형

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

[Vue.js] - HTML5 WebSocket(웹 소켓) 소스코드 및 데모 사이트  (0) 2020.11.13
Vue.js 뷰 라우터 정리 (4)  (0) 2020.04.29
Vue.js 컴포넌트 (3)  (0) 2020.04.23
Vue.js 뷰인스턴스 (2)  (0) 2020.04.21
Vue.js란 무엇인가? (1)  (1) 2020.04.20

댓글