beeimp
BeeImp
beeimp
전체 방문자
오늘
어제
  • 분류 전체보기 (110)
    • Program_Language (17)
      • Python (13)
      • Go (0)
      • JavaScript (4)
      • TypeScript (0)
      • Rust (0)
      • Solidity (0)
    • OS (8)
      • UNIX&LINUX (7)
      • Windows (0)
      • MacOS (1)
    • Front-End (19)
      • Svelte (19)
      • React (0)
    • Blockchain (6)
      • Bitcoin (0)
      • Ethereum (1)
      • Klaytn (0)
      • Project (5)
    • Data Structure&Algorithm (11)
      • Greedy (7)
      • Dynamic Programming (1)
      • Sort (0)
      • DFS & BFS (2)
      • Recursive (1)
    • Security (0)
      • SDP (0)
      • Authentication (0)
    • Network (3)
      • OpenWrt (0)
      • SDN&NFV (1)
    • Git (5)
    • IT_News (0)
    • 베타 학습단 (12)
      • SQL (12)
    • Project (1)
    • Issues (1)
    • Reviews (3)
    • I Learned (23)
      • TIL (23)
      • WIL (0)
    • Other (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • svelte
  • javascript
  • PYTHON
  • solidity
  • blockchain
  • 기초
  • mysql
  • Docker
  • Ethereum
  • 블록체인
  • 탐욕법
  • Nest.js
  • ubuntu
  • react
  • greedy
  • typescript
  • jenkins
  • github
  • Git
  • sql

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
beeimp

BeeImp

Front-End/Svelte

17_Svelte_Module_Context

2021. 8. 16. 18:59

Module Context

Sharing Code

지금까지 살펴본 모든 예에서, <script> 블록에는 각 컴포넌트 인스턴스가 초기화될 때 실행되는 코드가 포함되어 있습니다. 대부분의 컴포넌트에 필요한 것은 그것뿐입니다.

개별 컴포넌트 인스턴스 외부에서 일부 코드를 실행해야 하는 경우가 있습니다. 예를 들어, 실습 예제와 같은 오디오 플레이어 5개를 모두 동시에 재생할 수 있습니다. 하나를 재생하면 다른 오디오 플레이어가 모두 중지되는 것이 좋습니다.

<script context="module"> 블럭을 선언하면 됩니다. 컴포넌트를 인스턴스화할 때가 아니라 모듈이 처음 평가할 때 포함된 코드가 한 번 실행됩니다. AudioPlayer.svelte의 맨 위에 놓습니다.

<script context="module">
    let current;
</script>

이제 상태 관리 없이 컴포넌트간 간에 '대화(talk)'가 가능합니다.

function stopOthers() {
    if (current && current !== audio) current.pause();
    current = audio;
}

Exports

context="module" 스크립트 블록에서 내보낸 모든 항목은 모듈 자체에서 내보내기가 됩니다. AudioPlayer.svelte에서 stopAll 함수를 내보내면 다음과 같습니다.

<script context="module">
    const elements = new Set();

    export function stopAll() {
        elements.forEach(element => {
            element.pause();
        });
    }
</script>

그러면 App.svelte에서 다음을 가져올 수 있습니다.

<script>
    import AudioPlayer, { stopAll } from './AudioPlayer.svelte';
</script>

그리고 이벤트 핸들러를 사용합니다.

<button on:click={stopAll}>
    stop all audio
</button>
  • 컴포넌트가 default export이므로 default export를 사용할 수 없습니다.

'Front-End > Svelte' 카테고리의 다른 글

18_Svelte_Debugging  (0) 2021.08.17
16_Svelte_Special_Elements  (0) 2021.08.15
15_Svelte_Context_API  (0) 2021.08.14
14_Svelte_Component_Composition  (0) 2021.08.13
13_Svelte_Classes  (0) 2021.08.12
    'Front-End/Svelte' 카테고리의 다른 글
    • 18_Svelte_Debugging
    • 16_Svelte_Special_Elements
    • 15_Svelte_Context_API
    • 14_Svelte_Component_Composition

    티스토리툴바