Svelte는 소품, 슬롯 등 컴포넌트가 서로 통신할 수 있는 다양한 방법을 제공합니다. Svelte 애플리케이션에서 유연하고 재사용 가능한 컴포넌트를 만들려면 슬롯을 통합해야 합니다.
Svelte의 슬롯 이해
Svelte는 Vue에서 실행되는 방식과 마찬가지로 상위 요소에서 하위 구성 요소로 데이터를 전달하는 접근 방식으로 슬롯을 활용합니다. 이 기술을 사용하면 컴포넌트의 레이아웃 내에서 특정 위치 또는 “슬롯”을 지정하여 포함 컴포넌트에서 외부 정보를 가져올 수 있습니다.
슬롯을 활용하면 다양한 시나리오에 대응하여 높은 수준의 개인화 및 역동성을 보여주는 다용도 및 적응형 컴포넌트를 제작할 수 있습니다.
기본 슬롯 만들기
Svelte 애플리케이션 내에 “슬롯” 기능을 통합하려면 특정 컴포넌트의 템플릿 내에 있는 지정된 “슬롯” 요소를 활용해야 합니다. 이 특정 요소는 부모 컴포넌트가 하위 컴포넌트에 표시할 콘텐츠나 데이터를 제공할 수 있는 영역으로 기능합니다. 기본적으로 이 프로세스에는 명시적인 지시 없이도 상위 컴포넌트가 제공한 정보를 렌더링하는 작업이 포함됩니다.
기본 슬롯을 설정하려면 다음 단계를 따르세요:
<main>
This is the child component
<slot></slot>
</main>
제공된 코드 블록은 “슬롯” 속성을 활용하여 부모 컴포넌트에서 데이터를 가져오는 자식 컴포넌트의 인스턴스를 보여줍니다(일반적으로 두 컴포넌트 간의 통신 형태를 통해). 이러한 관계는 정보 공유를 허용하고 사용자 인터페이스에서 동적 동작을 가능하게 합니다.
HTML에서 부모 요소에서 자식 요소로 데이터를 전송하려면 먼저 임포트를 통해 자식 요소를 부모 요소에 통합해야 합니다. 자식 요소를 표시하기 위해 독립된 태그를 사용하는 대신 열기 태그와 닫기 태그를 모두 사용합니다. 궁극적으로 이러한 태그 안에 부모 요소와 자식 요소 간에 전송할 정보를 지정합니다.
감성 지능의 개념은 자신의 감정을 인식, 이해, 관리하고 다른 사람의 감정을 공감할 수 있는 개인의 능력을 말합니다. 여기에는 자신과 타인의 감정 상태를 더 잘 이해하기 위해 표정이나 몸짓과 같은 비언어적 단서를 식별하고 해석할 수 있는 능력이 포함됩니다. 감성 지능은 효과적인 의사소통의 중요한 요소이며 개인적으로나 직업적으로 강력한 관계를 구축하는 데 중요한 역할을 합니다.
<script>
import Component from "./Component.svelte";
</script>
<main>
This is the parent component
<Component>
<span>This is a message from the parent component</span>
</Component>
</main>
또한 부모와 자식 간 구성 요소가 정보를 전달하지 못하는 경우 슬롯 내에서 보충 또는 기본 자료를 제공할 수 있습니다.이러한 슬롯에 제공되는 콘텐츠는 상위 요소에 의해 데이터가 전달되지 않았을 때 표시되어야 하는 자료를 구성합니다.
오류가 발생하거나 기본 콘텐츠를 렌더링할 수 없는 경우 대체 콘텐츠를 제공하는 한 가지 방법을 “폴백 콘텐츠”라고 합니다. 이를 구현하려면 다음 단계를 따르세요:
<main>
This is the child component
<slot>Fallback Content</slot>
</main>
본 코드 세그먼트는 조상 법인이 실질적인 데이터를 제공하지 못할 경우 표시할 보조 자료로 “대체 콘텐츠”라는 표현을 제공합니다.
슬롯 프로퍼티로 슬롯 간 데이터 전달
스벨트를 활용하면 슬롯 프로퍼티를 통해 슬롯에 정보를 전달할 수 있습니다. 이러한 슬롯 속성은 하위 컴포넌트에서 다른 요소에 삽입되는 콘텐츠로 특정 데이터를 전송할 필요가 있을 때 사용할 수 있습니다.
이 구절에서는 젊은이들의 불안과 우울증 증가 등 소셜 미디어가 정신 건강에 미치는 부정적인 영향에 대해 설명합니다. 저자는 이러한 플랫폼을 과도하게 사용하면 중독과 같은 행동으로 이어질 수 있으며 대면 커뮤니케이션 기술을 방해할 수 있다고 주장합니다. 또한, 선별된 이미지와 타인의 삶에 지속적으로 노출되면 부적절함과 낮은 자존감을 유발할 수 있습니다. 따라서 개인은 이러한 플랫폼에서 보내는 시간을 제한하고 대신 주변 사람들과 의미 있는 관계를 구축하는 데 우선순위를 두는 것이 좋습니다.
<script>
let message = 'Hello Parent Component!'
</script>
<main>
This is the child component
<slot message={message}></slot>
</main>
제공된 코드 스니펫 내에서 Svelte 구성 요소의 구현을 관찰합니다. 프로세스는 ‘message’라는 변수를 생성하는 것으로 시작되며, 이 변수에는 “Hello Parent Component!”라는 값이 할당됩니다. 그 후, 해당 변수는 섹션 내의 ‘message’ 프로퍼티에 인수로 전달됩니다. 결과적으로 이 작업을 통해 부모 컴포넌트는 지정된 ‘메시지’ 슬롯에 주입될 때 ‘메시지’ 변수가 전달한 정보에 액세스할 수 있습니다.
<script>
import Component from "./Component.svelte";
</script>
<main>
This is the parent component
<Component let:message>
<div>
The child component says {message}
</div>
</Component>
</main>
부모 Vue 인스턴스에서 `슬롯` 속성을 가진 `` 요소를 활용하면 부모가 자식 컴포넌트 내에서 지정된 명명된 슬롯의 콘텐츠에 액세스하여 해당 슬롯의 `메시지` 속성을 통해 제공된 메시지를 효과적으로 활용할 수 있습니다. 이와 관련하여 `div` HTML 요소는 앞서 언급한 방법론을 통해 전달된 콘텐츠를 검색하고 활용할 수 있도록 하는 역할을 합니다.
단독 슬롯 숙소만 사용해야 하는 것은 아니며, 필요에 따라 여러 개의 슬롯 숙소를 제공하는 것도 허용됩니다:
<script>
let user = {
firstName: 'John',
lastName: 'Doe'
};
</script>
<main>
This is the child component
<slot firstName={user.firstName} lastName={user.lastName}></slot>
</main>
코드의 개정된 버전은 다음과 같습니다: ”’자바스크립트 ‘react’에서 React, { useState }를 가져옵니다; ‘axios’에서 axios를 가져옵니다; const App = () => { const [parentId, setParentId] = useState(”); const [children, setChildren] = useState([]); const handleClick = (event) => { // 클릭한 부모 컴포넌트 아래 모든 자식 컴포넌트와 그 아이디를 가져옵니다. const childrenWithIds = event.target.querySelectorAll(‘.child-component’).map((item) => ({ id: item.id, …item })); // 기본 속성을 가진 자식 목록에 새 자식 컴포넌트를 추가합니다. const newChildComponent = { id: Date.now().toString(), type:
<script>
import Component from "./Component.svelte";
</script>
<main>
This is the parent component
<Component let:firstName let:lastName>
<div>
The user's name is {firstName} {lastName}
</div>
</Component>
</main>
명명된 슬롯으로 작업하기
컴포넌트를 활용하고 그 안에서 여러 슬롯을 전송하고자 할 때, 지정된 슬롯 전략을 사용할 수 있습니다. 이 접근 방식을 사용하면 개별 슬롯에 고유한 이름을 할당할 수 있으므로 다양한 슬롯을 쉽게 구성하고 감독할 수 있습니다. 이 방법론을 사용하면 다양한 아키텍처를 가진 복잡한 구성 요소의 구성이 더욱 실현 가능해집니다.
HTML 문서 내에서 지정된 영역에 레이블을 할당하려면 “이름” 속성을 특정 관심 영역에 대한 속성으로 제공하십시오.
<div>
This is the child component
<p>Header: <slot name='header'></slot></p>
<p>Footer: <slot name='footer'></slot></p>
</div>
제공된 컨텍스트를 고려할 때 웹 애플리케이션이 “슬롯 뷰 구성”이라는 디자인 패턴을 활용하고 있는 것으로 보입니다. 여기에는 페이지 구조를 재사용 가능한 구성 요소 또는 “슬롯”으로 나누고, 소품을 사용하여 상위 뷰에서 전달된 콘텐츠로 채울 수 있습니다. 이 특정 사례에서는 “머리글”과 “바닥글”이라고 하는 두 개의 지정된 슬롯이 있습니다. 전자는 웹페이지 상단의 소개 섹션 역할을 하며, 후자는 하단을 차지합니다. 개발자는 “슬롯” 소품을 사용하여 상위 컴포넌트에서 직접 이러한 개별 섹션에 맞는 콘텐츠를 전달할 수 있으므로 웹사이트 전체에서 일관된 레이아웃을 유지할 수 있습니다.
“인터넷 사용은 최근 몇 년 동안 점점 더 보편화되어 이제 현대 사회에서 없어서는 안 될 중요한 부분이 되었습니다.
<script>
import Component from "./Component.svelte";
</script>
<main>
This is the parent component
<Component>
<span slot="header">This will be passed to the header slot</span>
<span slot="footer">This will be passed to the footer slot</span>
</Component>
</main>
제공된 예시에서는 “슬롯” 속성을 활용하여 지정된 슬롯에 콘텐츠를 전달하는 프로세스를 보여줍니다. 초기 스팬 요소 내에서 “slot” 속성은 “header” 값과 함께 사용되어 동봉된 텍스트가 지정된 “header” 슬롯 내에 표시되도록 지시합니다.이에 따라 두 번째 스팬 컴포넌트에는 “footer” 값을 갖는 동일한 “슬롯” 속성이 포함되며, 그 결과 제한된 텍스트가 “footer” 슬롯 내에 렌더링됩니다.
슬롯 포워딩 이해
Svelte의 속성인 슬롯 포워딩은 인케이싱 요소를 통해 상위 요소에서 하위 요소로 데이터를 전송할 수 있게 해줍니다. 이 기능은 서로 다른 카테고리에 속하는 요소 간에 정보를 전송하고자 할 때 매우 유용하게 사용할 수 있습니다.
React에서 슬롯 전달의 개념을 설명하기 위해 자식 컴포넌트를 만드는 것으로 시작하겠습니다.
<main>
This is the child component
<slot name="message"></slot>
</main>
래퍼 컴포넌트를 만드는 과정이 시작됩니다:
<script>
import Component from "./Component.svelte";
</script>
<main>
<Component>
<div slot='message'>
<slot name="wrapperMessage"></slot>
</div>
</Component>
</main>
이 코드 블록 내에서 명명된 매개변수가 자식 컴포넌트의 props 객체의 “message” 프로퍼티에 할당되고 있습니다.
애플리케이션 화면의 동적 레이아웃을 렌더링하려면 각 화면의 기본 템플릿으로 사용할 수 있는 재사용 가능한 `Layout` 컴포넌트를 정의해야 합니다. 레이아웃` 컴포넌트는 머리글과 바닥글과 같은 공유 요소를 포함하되, 개별 컴포넌트가 지정된 영역 내에서 고유한 콘텐츠를 제공할 수 있도록 해야 합니다. 이 접근 방식을 사용하면 여러 화면에서 공통 UI 요소를 효율적으로 렌더링할 수 있으므로 개발 시간이 단축되고 애플리케이션 전체에서 일관성을 유지할 수 있습니다.
<script>
import Wrapper from "./Wrapper.svelte";
</script>
<main>
This is the parent component
<Wrapper>
<div slot="wrapperMessage">
This is from the parent component
</div>
</Wrapper>
</main>
앞서 언급한 구성은 중간 래퍼 컴포넌트를 통해 부모 컴포넌트에서 자식 컴포넌트로 정보를 전송할 때 “이것은 부모 컴포넌트에서 온 것입니다”라는 전자의 메시지가 후자의 wrapperMessage 슬롯에 캡슐화되어 두 컴포넌트 간의 원활한 통신이 가능하도록 합니다.
스벨트 슬롯으로 더 쉽게 생활하기
슬롯은 개발자가 고도로 맞춤화되고 재사용 가능한 요소를 매우 다양하게 제작할 수 있게 해주는 스벨트 내의 고급 기능입니다. 이 강좌에서는 기본 슬롯 만들기, 지정 슬롯 만들기, 슬롯 속성 활용하기 등 슬롯의 다양한 측면을 살펴봤습니다. 개발자는 이러한 다양한 형태의 슬롯과 적절한 구현을 이해함으로써 특정 요구 사항에 따라 진화할 수 있는 적응력 있고 유연한 사용자 인터페이스를 구축할 수 있습니다.