Skip to content

Latest commit

ย 

History

History
337 lines (236 loc) ยท 8.32 KB

04.md

File metadata and controls

337 lines (236 loc) ยท 8.32 KB

Event Bus, Life Cycle, ES6

Component / Instance Option ์ˆœ์„œ

๊ถŒ๊ณ ๋˜๋Š” ์ˆœ์„œ

๋‹ค๋ฅธ Component๋กœ ๊ฐ’์„ ๋ณด๋‚ด๋Š” ๋ฒ•

์ด๋ฒคํŠธ ๋ช…์ด ๊ฐ™์œผ๋ฉด ์•ˆ ๋œ๋‹ค.

  1. event + props
  • ์ผ๋ฐ˜์ ์œผ๋กœ๋Š” ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ์— ๊ฐ’์„ ๋ณด๋‚ด์ค„ ๋•Œ, ์ƒ์œ„ component์— ๊ฐ’์„ ์˜ฌ๋ฆฐ ํ›„์— ๋‹ค์‹œ ํ•˜์œ„ component๋กœ ๋‚ด๋ ค์ค˜์•ผ ํ•œ๋‹ค.
  1. event bus
  • src ๋ฐ‘์— utils ํด๋” -> bus.js ์ƒ์„ฑ
export var bus = new Vue(); // export : ๋‹ค๋ฅธ ๊ณณ์—์„œ ์“ฐ๊ธฐ ์œ„ํ•จ
import { bus } from '../utils/bus';
  • this.$emit('...') : ๋ฐ‘์—์„œ ์œ„๋กœ ์˜ฌ๋ ค๋ณด๋‚ผ ๋•Œ ์‚ฌ์šฉ (์ด๋ฒคํŠธ ํŠธ๋ฆฌ๊ฑฐ)
removeAll: function() {
            localStorage.clear();
            this.$emit('remove-all'); // event bus -> ์ปดํฌ๋„ŒํŠธ๊ฐ„ data ์ „๋‹ฌ ๊ฐ€๋Šฅ
            bus.$emit('remove-all');
        }
beforeMount: function() {
        bus.$on('remove-all'); //์ด๋ฒคํŠธ๋ฅผ ๋ฐ›๊ธฐ ์œ„ํ•จ
}
  • ์œ„ ๋ฐฉ์‹์€ ๊ธฐ๋ณธ ์ตœ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ์ธ root๋กœ ๊ฐ€๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์™ธ๋ถ€์˜ root๋ผ๋Š” bus๋ฅผ ํ†ตํ•ด์„œ data๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.
    • ๋ณต์žกํ•ด์งˆ์ˆ˜๋ก ๋‚˜์ค‘์— trackingํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต๋‹ค. (๊ทœ์น™์— ์˜ํ•œ ๋ฐฉ์‹์ด ์•„๋‹ˆ๋ผ, ์ผ์ข…์˜ ํŽธ๋ฒ•์ด๊ธฐ ๋•Œ๋ฌธ)
    • ๋”ฐ๋ผ์„œ ์œ„ ๋ฐฉ์‹์„ ํŒ€ ํ”„๋กœ์ ํŠธ ๋‚ด์—์„œ ์“ฐ๋ ค๋ฉด ์ฝ”๋”ฉ ์ปจ๋ฒค์…˜์„ ๋”ฐ๋ผ์•ผ ํ•œ๋‹ค.
    • ๋Œ€๊ฐœ๋Š” event๋กœ ์˜ฌ๋ฆฌ๊ณ , props๋กœ ๋‚ด๋ฆฌ๋Š” ๋ฐฉ๋ฒ•์„ ์ฑ„ํƒํ•˜๊ณ , ์ด ๊ณ„์ธต์ด ๊นŠ์–ด์ง€๋ฉด Vuex๋ฅผ ์ฑ„ํƒํ•œ๋‹ค.
beforeDestroy: function() { // event๋ฅผ ์ œ๊ฑฐํ•  ๋•Œ
        bus.$off('remove-all', this.removeItems)
}

$on์œผ๋กœ event๋ฅผ ์ƒ์„ฑํ•œ ์ดํ›„์—, event queue์— ์Œ“์ด๊ธฐ ๋•Œ๋ฌธ์—, $off๋กœ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์ด ํ•„์š”ํ•˜๋‹ค.

Props ์ž‘์„ฑ ๋ฐฉ์‹

vue์˜ event bus๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ์— app์—์„œ data๋ฅผ ๋‚ด๋ ค ๋ณด๋‚ด๊ธฐ ์œ„ํ•ด props ์‚ฌ์šฉ

props: ['list'];
props: {
	list: Array;
}

v-on ์ด๋ฒคํŠธ ์ž‘์„ฑ ๋ฐฉ์‹

<todo-footer v-on:clear="todoItems = []"></todo-footer>

์ด๊ฒƒ๋„ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์œ„ํ•ด ์•„๋ž˜์™€ ๊ฐ™์ด method๋กœ ์ž‘์„ฑํ•ด์ฃผ๋Š” ๊ฒƒ์ด ์ข‹์Œ

this.todoItems = [];
localStorage.clear();

Vue.js Event Bus์— ๋Œ€ํ•ด ์ž˜ ์ •๋ฆฌ๋œ ๊ธ€

์ถ”๊ฐ€์ ์œผ๋กœ ๋ฆฌ์ŠคํŠธ์˜ ๊ฐ’์ด ๋ฐ”๋€Œ๊ณ  ๋‚˜์„œ ํ™”๋ฉด์ด ๋ฐ”๋กœ ๋ฐ”๋€Œ๋Š” ๊ฒƒ์„ reactivity๋ผ๊ณ  ๋งํ•œ๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ for๋ฌธ ๋ฌธ๋ฒ•

for (var i = 0; i < arr.length; i++) {
	console.log(arr[i]);
}
arr.forEach(function(value, index) {
	console.log(value, indexedDB);
});
for (var key in arr) {
	console.log(key, arr[key]);
}
  1. Vue์—์„œ๋Š” ์ด๋ ‡๊ฒŒ ์“ด๋‹ค.
<li v-for="(item, index) in list" :key="index"></li>

key๋Š” uniqueํ•œ ๊ฐ’ (key๋Š” id๋‚˜ index๊ฐ’์„ ์ฃผ๋กœ ์‚ฌ์šฉํ•จ)

Event, emit, payload

this.$emit('add:todo', value); // ๋™์ž‘: ๋Œ€์ƒ

event info

payload : ์ธ์ž

this.$emit('remove-each', item, index); // payload์˜ ์ˆœ์„œ๋Œ€๋กœ ๋“ค์–ด๊ฐ

payload order

Vue ํŒŒ์ผ์—์„œ style ์ ์šฉ

<template>
	<h1>Todo App</h1>
</template>

<style scoped>
	h1 {
		color: blue;
	}
</style>

style์— scoped ์†์„ฑ ์ถ”๊ฐ€ํ•˜๋ฉด ๊ทธ component์˜ file์—๋งŒ ์ ์šฉ๋˜๋Š” ์Šคํƒ€์ผ์ด ๋œ๋‹ค.

Mounted

template์ด string์—์„œ tag๋กœ ๋ณ€๊ฒฝ๋˜๋Š” ์‹œ์ ์ด๋‹ค.

export default {
  //vcrea
  created() { // document ์ƒ์„ฑ x
    var h1 = document.querySelector('h1');
    console.log('created', h1);
  },
  //vbm
  beforeMount() { // document ์ƒ์„ฑ x
    var h1 = document.querySelector('h1');
    console.log('before mount', h1);
  },
  //vm
  mounted() { // template๊ฐ€ ์‹ค์ œ dom์— ์žˆ์ง€ ์•Š๊ณ  string ์ƒํƒœ์—์„œ, mounted๊ฐ€ ๋˜์–ด์•ผ tag๋กœ ๋ณ€ํ™˜๋œ๋‹ค.
    var h1 = document.querySelector('h1');
    console.log('mounted', h1);
  },
};
</script>

lifecycle

created - beforeMount, Mounted ์ˆœ์„œ๋กœ ๋œจ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

form tag

form ํƒœ๊ทธ๋Š” submit ๋˜๋ฉด ์ƒˆ๋กœ๊ณ ์นจ์ด ๋˜๋Š” ํŠน์ง•์ด ์žˆ๋‹ค. ์ด๊ฒƒ์„ ๋ง‰๊ธฐ ์œ„ํ•ด์„œ,

event.preventDefault();

ํ˜น์€

<form v-on:submit.prevent="submitForm"></form>

์ด๋Ÿฐ ์ฒ˜๋ฆฌ๋“ค์„ ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

์ด์™€ ๋น„์Šทํ•œ event modifiers์—๋Š” prevent๋ฅผ ํฌํ•จํ•ด 6๊ฐ€์ง€ ์ข…๋ฅ˜๊ฐ€ ์žˆ๋‹ค

Babel

์ตœ์‹  JS ๋ฌธ๋ฒ•(ES6 ์ด์ƒ)์ด ์—ฌ๋Ÿฌ ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋Œ์•„๊ฐˆ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ฒƒ์ด Babel์ด๋‹ค.

Babeljs

babel

Babel์„ ์“ฐ๋Š” ์ด์œ ๋Š” IE ๋•Œ๋ฌธ์ž„์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ตœ์‹ ๋ฌธ๋ฒ• (ES6)

1. destructuring

var { name, id } = data;

2. ๋ณ€์ˆ˜ ์„ ์–ธ

์ฐธ๊ณ 

let a = 2; // ํ•œ ๋ฒˆ ์„ ์–ธํ•œ ๊ฒƒ์€ ๋‹ค์‹œ ์„ ์–ธ ํ•  ์ˆ˜ ์—†๋‹ค.

const c = 20; // const๋„ ๋งˆ์ฐฌ๊ฐ€์ง€

3. for๋ฌธ

ES6์ด์ „

JS๋Š” ES6 ์ด์ „์— var ์„ ์–ธ์œผ๋กœ ๋งˆ์ง€๋ง‰ ๊ฐ’์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์ง€๋งŒ,

ES6

let์„ ํ†ตํ•ด์„œ ํ•ด๋‹น ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์˜€์Œ.

4. Async, Await

    init() {
      loginUser()
      .then(getTodo)
      .then(displayTodo)
      .catch()
    },
    getTodo() {
      return new Promise((resolve, reject) => {
        resolve();
      //return axios.get()
      })
    }

Promise chaining์€ ์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ•ด์ง€๊ธฐ ๋•Œ๋ฌธ์— async, await๋ฅผ ์“ฐ๋Š” ๊ฒƒ์ด ์ตœ๊ทผ ๊ถŒ์žฅ๋œ๋‹ค.

async function ํ•จ์ˆ˜๋ช…() {
	await ๋น„๋™๊ธฐ_์ฒ˜๋ฆฌ_๋ฉ”์„œ๋“œ_๋ช…();
}

์ผ๋ฐ˜์ ์œผ๋กœ await์˜ ๋Œ€์ƒ์ด ๋˜๋Š” ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ์ฝ”๋“œ๋Š” axios ๋“ฑ ํ”„๋กœ๋ฏธ์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” API ํ˜ธ์ถœ ํ•จ์ˆ˜.

    async loginUser(){
      const user = await getUser();
      const todo = await getTodo(user.id);
      this.todo = todo;
    }

๊ธฐ๋ณธ์ ์œผ๋กœ js๋Š” ์ฝ”๋“œ๊ฐ€ ์œ„์—์„œ ์•„๋ž˜๋กœ ์‹คํ–‰๋˜๋Š”๋ฐ, async, await๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ์œ„์˜ ์ฝ”๋“œ๊ฐ€ ์™„๋ฃŒ๋˜๊ธฐ ์ „์— ๋’ค์— ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š์„ ๊ฒƒ์ด๋‹ค.

async & await์—์„œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ try catch์ด๋‹ค. ํ”„๋กœ๋ฏธ์Šค์—์„œ .catch()๋ฅผ ์‚ฌ์šฉํ–ˆ๋˜ ๊ฒƒ์ฒ˜๋Ÿผ async์—์„œ๋Š” catch {}๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

ํ™”์‚ดํ‘œ ํ•จ์ˆ˜

arr.forEach((value, index) => {
	console.log(value, index);
});

๋งŒ์•ฝ์— ์ธ์ž๊ฐ€ ํ•˜๋‚˜๋ผ๋ฉด ๊ด„ํ˜ธ๋ฅผ ์—†์• ๋„ ๋œ๋‹ค.

var sum = (a, b) => {
	return a + b;
};
var vm = this;
return axios.get('https://jsonplaceholder.typicode.com/posts/1').then(data => {
	this.post = data.post; // ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋ฅผ ์“ฐ๋ฉด vm์ด ์•„๋‹Œ this๋ฅผ ์‚ฌ์šฉํ•ด๋„ ๋œ๋‹ค.
});

์ธ์Šคํ„ด์Šค option ์†์„ฑ์—๋Š” ํ™”์‚ดํ‘œ๋ฅผ ์“ฐ๋ฉด ์•ˆ๋œ๋‹ค. ๋ฐ”๋กœ ์œ„์˜ this ๋ฒ”์œ„๊ฐ€ ๋‹ฌ๋ผ์ง€๊ธฐ ๋•Œ๋ฌธ.

fetchItems() {
	โ€ฆ
}

๋Œ€์‹ ์— ์ด๋Ÿฐ ์‹์œผ๋กœ ์ž‘์„ฑ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

Enhanced Object Literal

ํ–ฅ์ƒ๋œ ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด(ํ‘œ๊ธฐ๋ฒ•) : key์™€ value๊ฐ€ ๊ฐ™์•„์งˆ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

var obj = {
	num, // num: num,
};

vue์˜ component ์ •์˜์—์„œ๋„ ์˜ˆ๋ฅผ ๋“ค์–ด TodoInput์ด html์—์„œ๋Š” todo-input์œผ๋กœ ๋ฐ”๋€Œ๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค. (๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ณ„์„ ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค)

import, export

  • ๊ฐ’์ด๋‚˜ ๋ณ€์ˆ˜๊ฐ€ ๋‚˜๊ฐ€๋Š” ๊ณณ์—์„œ export var a
  • ๋‹ค๋ฅธ ํŒŒ์ผ์—์„œ ๊ฐ’์„ ๋ฐ›์•„์˜ค๊ธฐ ์œ„ํ•  ๋•Œ ์‚ฌ์šฉ
  • ๋ฐ›๋Š” ๊ณณ์—์„œ import {๊ฐ’ or ํ•จ์ˆ˜} from '๊ฐ€์ ธ์˜ค๋Š” ์œ„์น˜'
  • export default
    • ํ•ด๋‹น ํŒŒ์ผ์—์„œ ๋ฌด์กฐ๊ฑด ํ•˜๋‚˜๋งŒ ๋“ค๊ณ  ์˜ค๊ฒ ๋‹ค๋ฉด default๋ฅผ ๋ถ™์ธ๋‹ค.
    • ์ด๋•Œ๋Š” ๋ฌด์กฐ๊ฑด ํ•˜๋‚˜๋งŒ ๋“ค๊ณ  ์˜ค๊ธฐ ๋•Œ๋ฌธ์—, import sum from '...' ์ฒ˜๋Ÿผ { } ์—†์ด ๋“ค๊ณ  ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.