@@ -351,14 +351,17 @@ watchEffect(async () => {
351
351
352
352
๋ฐ์ํ ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ฉด Vue ์ปดํฌ๋ํธ ์
๋ฐ์ดํธ์ ์ฌ์ฉ์๊ฐ ๋ง๋ ๊ฐ์์ ์ฝ๋ฐฑ์ด ๋ชจ๋ ์คํ๋ฉ๋๋ค.
353
353
354
- ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐ๋ฐ์๊ฐ ์์ฑํ ๊ฐ์์ ์ฝ๋ฐฑ์ Vue ์ปดํฌ๋ํธ๊ฐ ** ์
๋ฐ์ดํธ๋๊ธฐ ์ ** ์ ์คํ๋ฉ๋๋ค.
355
- ๋ฐ๋ผ์ ๊ฐ์์ ์ฝ๋ฐฑ ๋ด์์ DOM์ ์ ๊ทผํ๋ฉด DOM์ด Vue์ ์ํด ์
๋ฐ์ดํธ๋๊ธฐ ์ ์ ์ํ์
๋๋ค.
354
+ ์ปดํฌ๋ํธ ์
๋ฐ์ดํธ์ ์ ์ฌํ๊ฒ, ์ฌ์ฉ์๊ฐ ๋ง๋ ๊ฐ์์(watcher) ์ฝ๋ฐฑ์ ์ค๋ณต ํธ์ถ์ ๋ฐฉ์งํ๊ธฐ ์ํด ์ผ๊ด ์ฒ๋ฆฌ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๊ฐ์ํ๊ณ ์๋ ๋ฐฐ์ด์ ๋๊ธฐ์ ์ผ๋ก ์ฒ ๊ฐ์ ํญ๋ชฉ์ ํธ์ํ ๋ ๊ฐ์์๊ฐ ์ฒ ๋ฒ ์คํ๋๋ ๊ฒ์ ์ํ์ง ์์ ๊ฒ์
๋๋ค.
356
355
357
- Vue์ ์ํด ์
๋ฐ์ดํธ๋ ํ ์ DOM์ ๊ฐ์์ ์ฝ๋ฐฑ์์ ์ ๊ทผํ๋ ค๋ฉด, ` flush: 'post' ` ์ต์
์ ์ง์ ํด์ผ ํฉ๋๋ค:
356
+ ๊ธฐ๋ณธ์ ์ผ๋ก, ๊ฐ์์์ ์ฝ๋ฐฑ์ ๋ถ๋ชจ ์ปดํฌ๋ํธ ์
๋ฐ์ดํธ๊ฐ ์์ ๊ฒฝ์ฐ ** ์ดํ์** ํธ์ถ๋๊ณ , ์์ ์ปดํฌ๋ํธ์ DOM ์
๋ฐ์ดํธ ** ์ด์ ์** ํธ์ถ๋ฉ๋๋ค. ์ด๋ ๊ฐ์์ ์ฝ๋ฐฑ ๋ด์์ ์์ ์ปดํฌ๋ํธ์ DOM์ ์ ๊ทผํ๋ ค๊ณ ํ ๋, DOM์ด ์
๋ฐ์ดํธ ์ ์ํ์ ์์ ๊ฒ์์ ์๋ฏธํฉ๋๋ค.
357
+
358
+ ### ํ์ฒ๋ฆฌ ๊ฐ์์ {#post-watchers}
359
+
360
+ Vue๊ฐ ์
๋ฐ์ดํธํ ํ์ ๊ฐ์์ ์ฝ๋ฐฑ์์ ์์ ์ปดํฌ๋ํธ์ DOM์ ์ ๊ทผํ๊ณ ์ ํ๋ค๋ฉด, ` flush: 'post' ` ์ต์
์ ์ง์ ํด์ผ ํฉ๋๋ค:
358
361
359
362
<div class =" options-api " >
360
363
361
- ``` js
364
+ ``` js{6}
362
365
export default {
363
366
// ...
364
367
watch: {
@@ -374,7 +377,7 @@ export default {
374
377
375
378
<div class =" composition-api " >
376
379
377
- ``` js
380
+ ``` js{2,6}
378
381
watch(source, callback, {
379
382
flush: 'post'
380
383
})
@@ -452,9 +455,57 @@ count.value++
452
455
453
456
</div >
454
457
458
+ ### ๋๊ธฐ์ ๊ฐ์์ {#sync-watchers}
459
+
460
+ Vue์์ ๋๊ธฐ์ ์ผ๋ก ์คํ๋๋ ๊ฐ์์(watcher)๋ฅผ ๋ง๋๋ ๊ฒ๋ ๊ฐ๋ฅํฉ๋๋ค. ์ด ๊ฐ์์๋ Vue๊ฐ ๊ด๋ฆฌํ๋ ์
๋ฐ์ดํธ ์ด์ ์ ๋๊ธฐ์ ์ผ๋ก ๋ฐ๋๋ฉ๋๋ค:
461
+
462
+ <div class =" options-api " >
463
+
464
+ ``` js{6}
465
+ export default {
466
+ // ...
467
+ watch: {
468
+ key: {
469
+ handler() {},
470
+ flush: 'sync'
471
+ }
472
+ }
473
+ }
474
+ ```
475
+
476
+ </div >
477
+
478
+ <div class =" composition-api " >
479
+
480
+ ``` js{2,6}
481
+ watch(source, callback, {
482
+ flush: 'sync'
483
+ })
484
+
485
+ watchEffect(callback, {
486
+ flush: 'sync'
487
+ })
488
+ ```
489
+
490
+ ๋๊ธฐ์ ` watchEffect() ` ๋ ๋ํ ` watchSyncEffect() ` ๋ผ๋ ํธ๋ฆฌํ ๋ณ์นญ๋ ๊ฐ์ง๊ณ ์์ต๋๋ค:
491
+
492
+ ``` js
493
+ import { watchSyncEffect } from ' vue'
494
+
495
+ watchSyncEffect (() => {
496
+ /* ๋ฐ์ํ ๋ฐ์ดํฐ ๋ณ๊ฒฝ ์ ๋๊ธฐ์ ์ผ๋ก ์คํ๋จ */
497
+ })
498
+ ```
499
+
500
+ </div >
501
+
502
+ :::warning ์ฃผ์ํด์ ์ฌ์ฉํ์ธ์
503
+ ๋๊ธฐ์ ๊ฐ์์๋ ๋ฐฐ์น ์ฒ๋ฆฌ๊ฐ ์์ผ๋ฉฐ, ๋ฐ์ํ ๋ณ๊ฒฝ์ด ๊ฐ์ง๋ ๋๋ง๋ค ํธ๋ฆฌ๊ฑฐ๋ฉ๋๋ค. ๊ฐ๋จํ boolean ๊ฐ๋ค์ ๊ฐ์ํ๋ ๋ฐ ์ฌ์ฉํ๋ ๊ฒ์ ๊ด์ฐฎ์ง๋ง, ์๋ฅผ ๋ค์ด ๋ฐฐ์ด๊ณผ ๊ฐ์ด ๋๊ธฐ์ ์ผ๋ก ์ฌ๋ฌ ๋ฒ ๋ณ๊ฒฝ๋ ์ ์๋ ๋ฐ์ดํฐ ์์ค์๋ ์ฌ์ฉ์ ํผํด์ผ ํฉ๋๋ค.
504
+ :::
505
+
455
506
<div class =" options-api " >
456
507
457
- ## ` this.$watch() ` \*
508
+ ## ` this.$watch() ` \* #{#this-watch}
458
509
459
510
[ ` $watch() ` ์ธ์คํด์ค ๋ฉ์๋] ( /api/component-instance.html#watch ) ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์์๋ฅผ ์ ์ธ์ ์ผ๋ก ์์ฑํ ์๋ ์์ต๋๋ค.
460
511
0 commit comments