모듈 컨텍스트를 사용하여 Svelte 구성 요소 인스턴스 간에 코드 공유
지금 http://jauyeung.net/subscribe/에서 내 이메일 목록을 구독하십시오.
Svelte는 프론트 엔드 웹 앱 개발을 위한 떠오르는 프론트 엔드 프레임워크입니다.
사용이 간편하고 결과를 빠르게 생성할 수 있습니다.
이 기사에서는 모듈 컨텍스트를 사용하여 구성 요소 인스턴스 간에 변수를 공유하는 방법을 살펴보겠습니다.
모듈 컨텍스트
Svelte 구성 요소에는 여러 구성 요소 인스턴스 간에 공유되는 코드가 포함될 수 있습니다.
이를 위해
context='module'
를 사용하여 스크립트 블록을 선언할 수 있습니다. 내부 코드는 구성 요소가 인스턴스화될 때가 아니라 모듈이 처음 평가될 때 한 번 실행됩니다.예를 들어 다음과 같이 재생되지 않는 오디오 요소를 중지하여 한 번에 하나의 오디오 요소만 재생할 수 있는 여러 오디오 요소를 만드는 데 사용할 수 있습니다.
App.svelte
:<script>
import AudioPlayer from "./AudioPlayer.svelte";
</script>
<AudioPlayer
src="https://file-examples.com/wp-content/uploads/2017/11/file_example_MP3_700KB.mp3"
/>
<AudioPlayer
src="https://file-examples.com/wp-content/uploads/2017/11/file_example_MP3_1MG.mp3"
/>
<AudioPlayer
src="http://www.hochmuth.com/mp3/Haydn_Cello_Concerto_D-1.mp3"
/>
AudioPlayer.svelts
:<script context="module">
let current;
</script>
<script>
export let src;
let audio;
let paused = true;
const stopOthers = () =>{
if (current && current !== audio) current.pause();
current = audio;
}
</script>
<article>
<audio
bind:this={audio}
bind:paused
on:play={stopOthers}
controls
{src}
></audio>
</article>
위의 코드에는 다음의 모든 인스턴스 간에 공유되는 코드가 있는
AudioPlayer
구성 요소가 있습니다.<script context="module">
let current;
</script>
이것은 우리가
pause
함수에서 했던 것처럼 재생되고 있지 않은 오디오 요소의 모든 인스턴스에서 stopOthers
를 호출할 수 있게 해줍니다. stopOthers
는 오디오 요소에서 재생을 클릭하면 실행됩니다.그런 다음
AudioPlayer
구성 요소에 App.svelte
인스턴스를 포함했습니다.따라서 오디오 요소 중 하나에서 재생을 클릭하면 다른 요소가 일시 중지됩니다.
수출
context='module'
스크립트 블록에서 내보낸 모든 것은 모듈 자체의 내보내기가 됩니다. 예를 들어 다음과 같이 현재 재생 중인 AudioPlayer
의 모든 오디오 요소를 중지하는 버튼을 만들 수 있습니다.App.svelte
:<script>
import AudioPlayer, { stopAll } from "./AudioPlayer.svelte";
</script>
<button on:click={stopAll}>Stop All</button>
<AudioPlayer
src="https://file-examples.com/wp-content/uploads/2017/11/file_example_MP3_700KB.mp3"
/>
<AudioPlayer
src="https://file-examples.com/wp-content/uploads/2017/11/file_example_MP3_1MG.mp3"
/>
<AudioPlayer
src="http://www.hochmuth.com/mp3/Haydn_Cello_Concerto_D-1.mp3"
/>
AudioPlayer.svelte
:<script context="module">
let elements = new Set();
export const stopAll = () => {
elements.forEach(element => {
element.pause();
});
};
</script>
<script>
import { onMount } from 'svelte';
export let src;
let audio;
onMount(() => {
elements.add(audio);
return () => elements.delete(audio);
});
</script>
<article>
<audio
bind:this={audio}
controls
{src}
></audio>
</article>
위의 코드에서 각
elements
컴포넌트가 마운트될 때 contex='module'
블록에서 생성한 AudioPlayer
세트에 모든 오디오 요소 인스턴스를 추가합니다.그런 다음
stopAll
의 모든 오디오 요소 인스턴스가 있는 elements
함수를 내보내고 루프를 돌고 pause
를 호출하여 모든 인스턴스에 대해 pause
를 호출합니다.App.svelte
에서는 stopAll
에서 AudioPlayer
함수를 가져온 다음 모두 중지 버튼을 클릭할 때 호출합니다.그런 다음 하나 이상의 오디오 요소에서 재생을 클릭하면 모두 중지 버튼을 클릭하면 모두 일시 중지됩니다.
구성 요소가 기본 내보내기이기 때문에 기본 내보내기를 가질 수 없습니다.
결론
모듈 컨텍스트 스크립트 블록을 사용하여 구성 요소의 모든 인스턴스 간에 공유되는 스크립트 블록을 추가할 수 있습니다.
모듈 컨텍스트 스크립트 블록 내에서 함수를 내보내면 함수를 가져온 다음 호출할 수 있습니다.
Reference
이 문제에 관하여(모듈 컨텍스트를 사용하여 Svelte 구성 요소 인스턴스 간에 코드 공유), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/aumayeung/sharing-code-between-svelte-component-instances-with-module-context-5ckf텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)