๐Ÿ“• Language/Vue

[vuejs] ํŽ˜์ด์ง€ ์ด๋™ ์‹œ, Interval ์ค‘์ง€ ์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•

a n u e 2022. 12. 14. 13:32

 

A ๋ฉ”๋‰ด ํ™”๋ฉด์—์„œ ๋ฐ์ดํ„ฐ ๋“ฑ๋ก ์‹œ, ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ JSON ํ˜•ํƒœ๋กœ ๋กœ์ปฌ์Šคํ† ๋ฆฌ์ง€์— ๋‹ด์•„ B ๋ฉ”๋‰ด ํ™”๋ฉด์— ๋ฟŒ๋ ค์ฃผ๋Š” ์ž‘์—…์„ ํ–ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ๊ฐ„ํ—์ ์œผ๋กœ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ค์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

์Šคํ† ๋ฆฌ์ง€์—๋Š” ์ œ๋Œ€๋กœ ๋‹ด๊ธฐ๋Š”๋ฐ, ์ฐธ ์ด์ƒํ–ˆ๋‹ค.

 

2๊ฐœ์˜ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๋„์›Œ๋†“๊ณ  ํ…Œ์ŠคํŠธ๋ฅผ ๋ฐ˜๋ณตํ–ˆ๋Š”๋ฐ,

B ๋ฉ”๋‰ด๋ฅผ ๋„์›Œ๋†“์€ ๋ธŒ๋ผ์šฐ์ €์—์„œ A๋‚˜ C๋“ฑ ํƒ€ ๋ฉ”๋‰ด๋กœ ์ด๋™์„ ํ•œ ๋’ค ๋‹ค์‹œ B๋กœ ๋Œ์•„์˜ค๋ฉด ํ•ด๋‹น ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๋“ฏ ๋ณด์˜€๋‹ค.

 

๋ฐ์ดํ„ฐ๋ฅผ ๋“ฑ๋กํ•˜๋Š” A์—์„œ storage๋ฅผ setํ•ด์ฃผ๊ณ , B์—์„œ mountํ•  ๋•Œ, storage๋ฅผ getํ•ด์ฃผ์—ˆ๋Š”๋ฐ 

get๋ฅผ ํ•˜๋ฉด์„œ B๋ฉ”๋‰ด์˜ ๊ทธ๋ฆฌ๋“œ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์–ด์ค„ ๋•Œ setInterval()์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฃผ๊ธฐ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ค๋„๋ก ํ–ˆ๋‹ค.

 

vue๊ฐ€ SPA์ด์–ด์„œ ๊ทธ๋Ÿฐ์ง€, ํƒ€ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ• ๋•Œ์—๋„ ์ด์ „ Interval์ด ์†Œ๋ฉธ๋˜์ง€ ์•Š๊ณ  ๋‚จ์•„์žˆ๋Š” ๋“ฏ ํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ง€์ •ํ•ด๋†“์€ ์‹œ๊ฐ„๋Œ€๋กœ ์›€์ง์ด์ง€ ์•Š๊ณ , ๊ฐ„ํ—์ ์œผ๋กœ ์›€์ง์ด๊ณ  ๊ทธ๋•Œ๋งŒ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐ›์•„์˜ค๋Š” ๊ฒƒ ์ฒ˜๋Ÿผ ๋ณด์—ฌ์กŒ๋‹ค.

 

์ฐพ์•„๋ณด๋‹ˆ clearInterval์ด๋ผ๋Š”๊ฒŒ ์žˆ์–ด์„œ, unmountํ•  ๋•Œ, ํ•ด๋‹น Interval์„ ์ค‘์ง€์‹œ์ผœ์ฃผ์—ˆ๋‹ค.

 

 

<์ด์ „์ฝ”๋“œ>

onMounted(() => {
  setInterval(function() {
  	if(localStorage.getItem('flag') === 'Y') {
       const target = localStorage.getItem('target');
       state.table.data.unshift(JSON.parse(target));
       localStorage.setItem('flag', 'N'); 
    }
  }, 500);
 });

 

<๋ณ€๊ฒฝ์ฝ”๋“œ>

const getTargetData = () => {
	if(localStorage.getItem('flag') === 'Y') {
       const target = localStorage.getItem('target');
       state.table.data.unshift(JSON.parse(target));
       localStorage.setItem('flag', 'N'); 
     }
 };
 
 .
 .
 .
 
 mounted() {
   this.loading = setInterval(this.getTargetData, 500);
 },
 unmounted() {
   clearInterval(this.loading);
 }