Vue Study

Vue3 - computed and watch

2020. 10. 28. 22:13
๋ชฉ์ฐจ
  1. ๐Ÿ“Œ ๋ชฉ์ฐจ
  2. ๐Ÿ“Œ Introduction
  3. ๐Ÿ“Œ computed
  4. ๐Ÿ“Œ watchEffect
  5. ๐Ÿ“Œ watch
  6. reactive ์ผ๋•Œ:
  7. ref์ผ๋•Œ:
  8. ๐Ÿ“Œ Conclusion
  9. ๐Ÿ“Œ Reference
๋ฐ˜์‘ํ˜•

๐Ÿ“Œ ๋ชฉ์ฐจ

  • Introduction
  • computed
  • watchEffect
  • watch
  • Conclusion
  • Reference

๐Ÿ“Œ Introduction

์•ˆ๋…•ํ•˜์„ธ์š”. ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” computed์™€ watch์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ์ฝ”๋“œ๋Š” ์—ฌ๊ธฐ์„œํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“Œ computed

computed๋Š” ๊ธฐ์กด vue 2์—์„œ์˜ computed์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์ ์€ immutable ref object๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

import { ref, computed } from 'vue';

export default {
  setup() {
    const count = ref(1);
    const plusOne = computed(() => count.value + 1);

    const onClick = () => {
      console.log('count', count.value); // 1
      console.log('plusOne', plusOne.value); // 2
    };

    return {
      onClick
    };
  }
};

get๊ณผ set์œผ๋กœ ์‚ฌ์šฉ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

import { ref, computed } from 'vue';

export default {
  setup() {
    const count = ref(1);

    const plustTwo = computed({
      get: () => count.value + 2,
      set: val => {
        count.value = val;
      }
    });

    const onClick = () => {
      console.log('count', count.value); // 1
      console.log('plusTwo', plustTwo.value); // 3;
      plustTwo.value = 0;
      console.log('plusTwo', plustTwo.value); // 2
    };

    return {
      onClick
    };
  }
};

๐Ÿ“Œ watchEffect

watchEffect๋Š” reactive๋ฅผ ๊ด€์ฐฐํ•˜์—ฌ ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚˜๋ฉด ๋‚ด๋ถ€์˜ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ ์‹œํ‚ต๋‹ˆ๋‹ค.

import { watchEffect, ref } from 'vue';

export default {
  setup() {
    const count = ref(0);

    watchEffect(() => console.log(count.value)); // created ๋ ๋•Œ log 0 โญ๏ธ

    let timeout;
    const onClick = () => {
      clearTimeout(timeout);
      timeout = setTimeout(() => {
        count.value++; // console.log(1) by watchEffect โญ๏ธ
      }, 1000);
    };

    return {
      onClick
    };
  }
};

๐Ÿ“Œ watch

watch๋Š” ๊ธฐ์กด vue2์—์„œ์˜ watch์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ reactive์™€ ref๋ฅผ ์„ ์–ธํ•ด์ฃผ๋Š”๊ฒŒ ์กฐ๊ธˆ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

reactive ์ผ๋•Œ:

import { watch, reactive } from 'vue';

export default {
  setup() {
    const state = reactive({ count: 0 });
    watch(
      () => state.count,
      (count, prevCount) => {
        console.log('count', count);
        console.log('prevCount', prevCount);
      }
    );

    const onClick = () => {
      state.count++; // count 1 prevCount 2 โญ๏ธ
    };

    return {
      onClick
    };
  }
};

ref์ผ๋•Œ:

import { watch, ref } from 'vue';

export default {
  setup() {
    const count = ref(0);

    watch(count, (count, prevCount) => {
      console.log('count', count);
      console.log('prevCount', prevCount);
    });

    const onClick = () => {
      count.value++; // count 1 prevCount 2
    };

    return {
      onClick
    };
  }
};

๋˜ํ•œ ๋‹ค์ค‘์œผ๋กœ watch๋ฅผ ํ•ด์ค„์ˆ˜ ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

import { watch, ref } from 'vue';

export default {
  setup() {
    const count1 = ref(0);
    const count2 = ref(0);

    watch([count1, count2], ([count1, count2], [prevCount1, prevCount2]) => {
      console.log('count1', count1);
      console.log('prevCount1', prevCount1);
      console.log('count2', count2);
      console.log('prevCount2', prevCount2);
    });

    const onClick = () => {
      count1.value++; // count1 1 prevCount1 2 count2 0 prevCount2 0
    };

    return {
      onClick
    };
  }
};

๐Ÿ“Œ Conclusion

computed์™€ watch๋Š” reactive์™€ ref์— ๋น„ํ•ด ์–ด๋ ต์ง€๋Š” ์•Š์•˜๋˜๊ฑฐ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ๋” ํ™•์ธ์„ ํ•ด๋ด์•ผ๊ฒ ์ง€๋งŒ ๋‹ค์ค‘์œผ๋กœ watch๋ฅผ ์“ธ์ง€๋Š” ์กฐ๊ธˆ ์˜๋ฌธ์ด ๋“ญ๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ๋‹ค์Œ ํฌ์ŠคํŒ…์—์„œ ๋งŒ๋‚˜์š”~~

๐Ÿ“Œ Reference

  • Vue3 ๊ณต์‹๋ฌธ์„œ
๋ฐ˜์‘ํ˜•

'Vue Study' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Vue3 - teleport  (0) 2020.11.08
Vue3 - Provide/Inject  (0) 2020.11.04
Vue3 - LifeCycle  (0) 2020.10.30
Vue3 - Refs  (0) 2020.10.27
Vue3 - Basic Reactivity APIs  (0) 2020.10.26
  1. ๐Ÿ“Œ ๋ชฉ์ฐจ
  2. ๐Ÿ“Œ Introduction
  3. ๐Ÿ“Œ computed
  4. ๐Ÿ“Œ watchEffect
  5. ๐Ÿ“Œ watch
  6. reactive ์ผ๋•Œ:
  7. ref์ผ๋•Œ:
  8. ๐Ÿ“Œ Conclusion
  9. ๐Ÿ“Œ Reference
'Vue Study' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • Vue3 - Provide/Inject
  • Vue3 - LifeCycle
  • Vue3 - Refs
  • Vue3 - Basic Reactivity APIs
eddie0329
eddie0329
Front-end Developer
๋ฐ˜์‘ํ˜•
eddie0329
Eddie Sunny's Blog
eddie0329
์ „์ฒด
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (100)
    • Summary of Book (0)
    • Vue Study (11)
    • Vue TDD (9)
    • Vue BDD (5)
    • Design Pattern (9)
    • Javascript Study (3)
    • React Study (15)
    • React TDD (1)
    • Vue Storybook (2)
    • Refactoring (0)
    • Graphql_Apollo (3)
    • Svelte (8)
    • Open Source (1)
    • D3 (4)
    • Typescript (1)
    • CSS (2)
    • Android (0)
    • Java (0)
    • Kotlin (0)
    • ์žก๋‹ด (0)
    • Swift (19)
    • Rust (2)
    • ํšŒ์‚ฌ์ด์•ผ๊ธฐ (2)
    • ReactNative Study (2)
    • Vitest (0)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • Home

๊ณต์ง€์‚ฌํ•ญ

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

  • TDD
  • D3
  • javascript pattern
  • jest
  • CSS
  • vue3
  • react useRef
  • swift
  • vue tdd
  • React Native
  • BDD
  • svelte
  • apollo
  • react-component-slot
  • client only
  • Kotlin
  • react
  • Design Pattern
  • Cypress
  • vue storybook
  • storybook6
  • Vue test
  • vue cypress
  • vue bdd
  • swift5
  • Vue
  • TypeScript
  • Javascript
  • slot ํŒจํ„ด
  • Nextjs

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

hELLO ยท Designed By ์ •์ƒ์šฐ.
eddie0329
Vue3 - computed and watch
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”

๋‹จ์ถ•ํ‚ค

๋‚ด ๋ธ”๋กœ๊ทธ

๋‚ด ๋ธ”๋กœ๊ทธ - ๊ด€๋ฆฌ์ž ํ™ˆ ์ „ํ™˜
Q
Q
์ƒˆ ๊ธ€ ์“ฐ๊ธฐ
W
W

๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๊ธ€

๊ธ€ ์ˆ˜์ • (๊ถŒํ•œ ์žˆ๋Š” ๊ฒฝ์šฐ)
E
E
๋Œ“๊ธ€ ์˜์—ญ์œผ๋กœ ์ด๋™
C
C

๋ชจ๋“  ์˜์—ญ

์ด ํŽ˜์ด์ง€์˜ URL ๋ณต์‚ฌ
S
S
๋งจ ์œ„๋กœ ์ด๋™
T
T
ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ ์ด๋™
H
H
๋‹จ์ถ•ํ‚ค ์•ˆ๋‚ด
Shift + /
โ‡ง + /

* ๋‹จ์ถ•ํ‚ค๋Š” ํ•œ๊ธ€/์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธฐ๋ณธ ๋„๋ฉ”์ธ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.