본문 바로가기

Web Front-end/vue.js

뷰 메모모음

반응형

[1] Vue 시작하기
==================
기본 명령어 : 
npm -v
node -v

package.json 생성
npm init

1.뷰 설치
npm i vue 

**특정버전까는법 @를 띄어쓰기 없이 붙이고 버전까지
npm i vue@2.7.0

2. webpack 생성 (리액트 웹팩 다루는거랑 동일)
    - npm i -D webpack webpack-cli
  ** : -D 는 개발용 옵션.


[2] 빌드하기
1.package.json에서 스크립트 부분을 아래와 같이 지정
  "scripts": {
    "build": "webpack"
  },

2. npm run build 로 실행

3. vue-loader 설치
npm i vue-loader -D

3-1. vue-loader 설정
webpack.config.js 에서..
vue파일을 만나면 vue-loader가 처리해라.

    module:{
        rules: [{
            test: /\.vue$/,
            loader : 'vue-loader',
        }]
    },

4. vue-template-compiler
npm i vue-template-compiler -D

** vue랑 vue-template-compiler는 버전 동일하게 맞춰줘야 함.






[3] vue 반복문
===================================
참조파일 : 3.numberBaseball.vue

<li v-for="t in tries">

v-for 안에 들어가는 구문은 자바스크립트로 동작하는데, 
try catch , if 등은 예약어므로 쓸수가 없음 따라서 t 로 쓰게됨.


[4] vue 기타 팁
===================================

1. submit 표현식

<form v-on:submit="onSubmitForm">

onSubmitFrom(e){
   e.preventDefault();
}

위와 같은 코드를 아래와 같이 축약가능

<form @submit.prevent="onSubmitForm">

onSubmitFrom(){

}

추가로 v-bind:class="state" 같은경우도 
:class="state" 형식으로 축약가능
---------------------------------------------------------------

2. template 
div 대신 사용가능, 개발자 도구로 볼때 아예 안보이지만 v-if 등의 속성은 여전히 사용가능.

!! 아래 같은 형식 불가능. 최상위 template 바로 아래에는 그냥 div써야됨. 
   태그 중간중간에 template써서 가려주는건 가능.
<template>
  <template>
  </template>
</template>

3. v-show
v-if 쓰는거랑 다를바 없지만 v-if의 경우 개발자도구에서 <-- -->(주석) 형태로 아예 보이지 않지만
v-show는 태그는 존재하되 display:none 속성이 적용된 상태로 있음.



[5] webpack 기타 팁
===================================

1. --watch 명령어
package.json 에서..
아래와 같이 --watch를 붙여줄 경우 작업파일에 내용이 갱신되면 자동으로 다시 빌드하게끔 만들어줌

  "scripts": {
    "build": "webpack --watch"
  },


[6] vue-style-loader
===================================
뷰 스타일 로더
npm i vue-style-loader
npm i css-loader 

파일 : webpack.config.js 에 다음과 같이 추가

module:{
    rules: [{
        test: /\.css$/,
        use : [
                'vue-style-loader',
                'css-loader'
            ]
    }


[7] webpack-dev-server
===================================
npm i webpack-dev-server -D

개발용 서버, 
특징 : wepback.config.js 파일에있는 output에 있는 내용으로 인해 일반적으로 dist/app.js를 생성하는 반면에
dev-server의 기능으로 인해 따로 파일을 생성하지 않고 메모리에 저장해두는 형식으로 작동함.
따라서 publicPath를 반드시 써줘야됨.

package.json에서 wepback --watch 명령어 쓰는것보다 쉽게 화면 수정사항 반영하는 방법 
package.json과 webpack.config.js에 각각 아래 코드 추가하면 동작하게 됨

[package.json]
  "scripts": {
    "dev": "webpack-dev-server --hot"
  },

[webpack.config.js]
  output : {
      publicPath:'/dist'
  },


[8] vue LifeCycle
===================================
크게 4단계로 구분됨. 
created ,mounted , updated, destroyed


[9] vue 스타일 가이드
===================================
https://v3.ko.vuejs.org/style-guide/

우선순위 A:필수
1.컴포넌트의 이름은 항상 두단어 이상 합성
2.컴포넌트의 data는 반드시 함수
3.props는 반드시 type을 정의해야함.
4.v-for에는 key값이 반드시 필요
5.v-if와 v-for 절대 동시에 사용하면 안된다.
등등..

[10]vue 특징 : 7.틱택토..중
this.$root , this.$parent
$표시를 사용해 자식컴포넌트에서 부모 루트의 데이터 조작이 가능하게 됨
(vue에서 제공하는기능)

!!!!!!!
vue에서 객체나 배열의 내부 index를 바꿀때 
console에서는 데이터가 변동하고 있는걸 확인할수 있지만,
실제로 화면에 반영이 안됨. (자바스크립트 한계)

ex) 
onChangeData(){
    this.turn ='x';  //가능
    this.tableData.push('a) //가능
    this.tableData[0][1] //불가능
 } 

 그래서 실제 화면을 바꾸는 방법 
 Vue.set()
 this.$set
 둘중 하나 사용!!
!!!!!!



[11]  Vuex
this.$parent this.$root를 계속 해서 쓰는건 좋은데...
프로젝트 규모가 커졌을떄, 예를들어 컴포넌트가 수천개인데 거기서 $parent를 찾으려면 골치아픔.
이럴때 중앙통제를 해주는 역할이 Vuex
뷰엑스 = 리액트의 리덕스

반응형