Vue 중급강좌2
인프런 Vue.js 중급 강좌 - 웹앱 제작으로 배워보는 Vue.js, ES6, Vuex / 장기효(캡틴판교)
animation과 transition
Vue에서는 애니메이션과 트랜지션을 코어 라이브러리 단에서 제공
slot
특정 컴포넌트의 일부 ui를 재사용할 수 있는 기능
Modal로 예를 들면 dafault Modal을 만들어 놓고 Modal을 호출할때 상황에 맞는 내용을 slot부분에 넣을 수 있음(경고, 확인, 안내 등)
template 내용을 들고오고 나서 다시 한번 재정의 할 수 있는 부분
shorthand 축약형
transition-group
name은 css class와 관계
tag는 transition effect가 들어갈 tag
ES6(===ECMAScript 2015)
자바스크립트의 최신 문법
최신 FE Framework인 React, Anguler, Vue에서 권고하는 언어 형식
ES5에 비해 문법이 간결
구 버전 브라우저 중 지원하지 않는 브라우저가 있으므로 transpiling 필요
Babel -> JavaScript compiler
const & let
새로운 변수 선언 방식
기존의 변수 선언 방식은 유연하면서 애매모호함
블록 단위
{}
로 변수의 범위가 제한됨const
: 한번 선언한 값을 변경할 수 없음(상수 개념) / 객체나 배열의 내부는 변경 가능let
: 한번 선언한 값을 다시 선언할 수 없음
ES5의 특징
변수의 Scope
ES5는
{}
에 상관없이 스코프가 설정됨
Hoisting
선언한 함수와 변수를 해석기가 가장 상단에 있는 것처럼 인식함
코드의 라인 순서와 관계없이 함수선언식(function statement)과 변수를 위한 메모리 공간을 먼저 확보 함수표현식(function expression)은 해당 안됨
함수선언과 변수선언 먼저, 대입 및 할당은 나중에
Arrow Function
화살표 함수
function
키워드 대신=>
로 대체콜백 함수의 문법을 간결화
Enhanced Object Literals
향상된 객체 리터럴
객체의 속성을 메소드로 사용할 때
function
예약어를 생략하고 생성 가능
속성명 축약
Modules
모듈 로더 라이브러리(AMD, Commons JS) 기능을 js언어 자체에서 지원
호출되기 전까지는 코드 실행과 동작을 하지 않는 특징
export & import
default export
: 한개의 파일에서 하나만 export, 가져다 쓸 때 이름을 부여해서 사용
Vuex 상태 관리 라이브러리
복잡한 app의 컴포넌트들을 관리하는 상태 관리 패턴이자 라이브러리
React의 Flux 패턴에서 기인함
단방향 데이터 흐름
Flux
MVC 패턴의 복잡한 데이터 흐름 문제를 해결하는 개발 패턴 - Unidirectional data flow
Flux 패턴 : Action -> Dispatcher -> Model(Store) -> View (단방향)
MCV 패턴 : Controller -> Model <-> View (양방향)
Vuex가 필요한 이유
데이터를 전달하기 위해 거쳐야할 컴포넌트가 많을 때
컴포넌트 간 데이터(이벤트) 전달이 명시적이지 않음
여러 개의 컴포넌트에서 같은 데이터를 업데이트 할 대 동기화 문제
Vuex 구조
컴포넌트 -> 비동기 로직 -> 동기 로직 -> 상태
Vue Components -> Actions -> Mutations -> State
Vuex 설치하기
Vuex 등록하기
Vuex 기술 요소
state : 컴포넌트 간에 공유하는 데이터
data
state가 변경되면 vue reactivity에 의해 화면 갱신
getters : 연산된 state 값을 접근하는 속성
computed
mutations : 유일하게 state 값을 변경하는 이벤트 로직, 메서드
methods
state를 변경할 때 mutations을 이용하는 이유 : 어떤 컴포넌트에서 해당 state를 변경했는지 명확하게 추적하기 위해
actions : 비동기 처리 로직을 선언하는 메서드
async methods
비동기 로직을 담당하는 mutations(ex.데이터 요청, Promise, ES6 async)
Q. 왜 비동기처리 로직은 꼭 actions에 선언해야 하는가? A. 시간차를 두고 여러 컴포넌트에서 state를 변경하는 경우, state 값의 변화를 추적하기 어렵기 때문에
Helper 함수
Store에 있는 속성들을 간편하게 코딩하는 방법
Helper 함수들은 인자를 명시하지 않아도 호출 단에서 인자를 넘겨줬다면 그대로 들고감 너무 신기하다...
... : ES6의 Object Spread Operator, 객체 속성들을 모두 가져옴
mapState
Vuex에 선언한 state 속성을 뷰 컴포넌트에 더 쉽게 연결 해줌
mapGetters
Vuex에 선언한 getters 속성을 뷰 컴포넌트에 더 쉽게 연결 해줌
Q. computed는 왜 사용하는가? A. 템플릿에서 사용하는 복잡한 로직은 computed에서 사용. 재사용성 증가. mapState와 mapGetters를 computed에서 사용하는 이유.
mapMutations, mapActions
Vuex에 선언한 mutations, actions 속성을 뷰 컴포넌트에 더 쉽게 연결 해줌
프로젝트 구조화와 모듈화
store속성의 모듈화
state, getters, mutations, actions 각각의 파일로
store의 모듈화
앱의 규모가 커서 1개의 store로 관리가 힘들때
modules
속성 사용
Last updated