inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Svelte 입문 강의 - A부터 Z까지

Writable stores

질문드립니다 !

250

압력산대 사가사가덕

작성한 질문수 3

1

count에 값이 변경될때마다 호출되기때문에 onDestroy로 해지해야 한다고 하셨는데, 그 이유에 대해 자세히 알 수있을까요??

작동하는데 큰 문제는 없는것같은데, 어떤이유때문인가요? 

svelte

답변 1

0

이효범(Beomy)

안녕하세요. :) 강의 내용중 모호했던 부분이 있었던 것 같습니다.

subscribe에 전달 된 함수가 count 값이 변경될 때 마다 호출이 되는데, subscribe를 사용한 컴포넌트가 화면에서 제거되어도, count 값이 변경되면  subscribe에 전달 된 함수가 실행되기 때문에 컴포넌트가 제거되는 onDestroy에서 해지해야 합니다.

간단한 예제를 첨부하겠습니다.

<!-- App.svelte -->
<script>
  import { onDestroy } from 'svelte';
  import { count } from './stores';

  import Incrementer from './Incrementer.svelte';
  import Decrementer from './Decrementer.svelte';
  import Resetter from './Resetter.svelte';

  let countValue;
  let isShow = true;

  const unsubscribe = count.subscribe(value => countValue = value);

  onDestroy(() => {
    unsubscribe();
  });
</script>

<p>count: {countValue}</p>

<Incrementer />
<Decrementer />
{#if isShow}
  <Resetter />
{/if}
<button on:click={() => isShow = !isShow}>Reset 버튼 제거</button>

<!-- Resetter.svelte -->
<script>
  import { onDestroy } from 'svelte';
  import { count } from './stores';

  const unsubscribe = count.subscribe(value => console.log(value))

  // onDestroy 함수를 주석을 한 후와 주석을 제거한 후의 차이를 비교해 보세요.
  onDestroy(() => {
    unsubscribe();
  });

  function reset (){
    count.set(0);
  }
</script>

<button on:click={reset}>reset</button>

App.svelte와 Resetter.svelte를 위의 코드처럼 수정하고, "Reset 버튼 제거" 버튼을 클릭하면서, Resetter 컴포넌트의 onDestory 라이프 사이클 함수가 정의된 코드와 정의 되지 않은 코드의 로그 출력 결과를 확인하시면 이해하는데 도움이 될 것 같습니다.

프로젝트 실행이 되지 않아 menu API 테스트가 불가합니다 ㅠ

0

134

9

프론트 api.js의 요청 headers 옵션의 cors 관련 설정 질문

0

61

2

모듈 버전이 안맞아서 발생하는 문제 같습니다;;;

0

188

2

meteor 버전 때문에 실행이 안됩니다.

0

160

2

graghQL의 transaction 처리속도가 궁금합니다.

0

112

2

질문있습니다.

0

106

2

화면 구성 설명용 도구 이름

0

158

1

Meteor 실행 오류 문의 드립니다.

0

184

1

영호 좋아요 버튼이 콘솔에는 잘 찍히지만 화면에 렌더링 되지 않습니다.

0

129

2

영화목록 component 만들기 에서 질문이 있습니다.

0

209

3

"hello".toUpperCase() 가 안되는데요.

0

148

1

컴포넌트 이벤트

1

314

1

CDN이 뭔가요?

1

1662

1

혹시 다음 강의는 언제쯤??

1

333

2

강좌 범위는 아니지만요...

2

401

2

undefined 없애기

1

388

3

생명주기 중 afterUpdate가 동작하지 않는 이유를 모르겠습니다

2

464

2

이벤트 수식어 중에서 passive 설명이 잘 이해가 되질 않습니다

1

1156

3

이 부분은 좀 어려운거 같아여

1

302

4

import Child 대소문자 차이

1

463

1

npm run dev not working

1

514

3

임포트하는 이유에 대해..

1

274

3

오류가 나요

0

303

1

프레임워크

0

217

1