Слоты упрощают передачу данных от одного компонента к другому. Узнайте, как начать использовать их для создания динамических компонентов.

Svelte предлагает различные способы взаимодействия компонентов друг с другом, включая реквизиты, слоты и т. д. Вам понадобится интегрировать слоты для создания гибких и многократно используемых компонентов в ваших приложениях Svelte.

Понимание слотов в Svelte

Слоты в фреймворк Svelte работать аналогично слоты в Vue. Они предоставляют способ передачи контента от родительского компонента к дочернему. С помощью слотов вы можете определять заполнители в шаблоне компонента, куда можно вставлять контент из родительского компонента.

Этот контент может быть простым текстом, HTML-разметкаили другие компоненты Svelte. Работа со слотами позволяет создавать настраиваемые и динамические компоненты, которые адаптируются к различным вариантам использования.

Создание базового слота

Чтобы создать слот в Svelte, используйте команду слот элемент в шаблоне компонента. слот

instagram viewer
Элемент является заполнителем для содержимого, которое вы передаете из родительского компонента. По умолчанию слот будет отображать любой переданный ему контент.

Вот пример того, как создать базовый слот:

<main>
This is the child component
<slot>slot>
main>

Приведенный выше блок кода представляет дочерний компонент, который использует элемент slot для получения содержимого из родительского компонента.

Чтобы передать содержимое из родительского компонента в дочерний компонент, вы сначала импортируете дочерний компонент в родительский компонент. Затем вместо использования самозакрывающегося тега для визуализации дочернего компонента используйте открывающий и закрывающий тег. Наконец, в тегах компонента напишите содержимое, которое вы хотите передать из родительского компонента в дочерний.

Например:

<script>
import Component from "./Component.svelte";
script>

<main>
This is the parent component
<Component>
<span>This is a message from the parent componentspan>
Component>
main>

Помимо передачи содержимого от родительских компонентов к дочерним, вы можете предоставить в слотах резервный контент/контент по умолчанию. Это содержимое будет отображаться в слоте, если родительский компонент не передает никакого контента.

Вот как вы можете передать резервный контент:

<main>
This is the child component
<slot>Fallback Contentslot>
main>

Этот блок кода предоставляет текст «Резервный контент» в качестве резервного контента для слота, который будет отображаться, если родительский компонент не предоставляет никакого контента.

Передача данных через слот с помощью реквизита слота

Svelte позволяет передавать данные в слоты, используя реквизиты слотов. Вы используете реквизиты slot в ситуациях, когда хотите передать некоторые данные из дочернего компонента в контент, в который вы вставляете слот.

Например:

<script>
let message = 'Hello Parent Component!'
script>

<main>
This is the child component
<slotmessage={message}>slot>
main>

Блок кода выше представляет компонент Svelte. В рамках сценарий тег, вы объявляете переменную сообщение и присвойте текст «Hello Parent Component!» к этому. Вы также передаете переменную сообщения в свойство slot. сообщение. Это делает данные сообщения доступными для родительского компонента, когда он вводит контент в этот слот.

<script>
import Component from "./Component.svelte";
script>

<main>
This is the parent component
<Componentlet: message>
<div>
The child component says {message}
div>
Component>
main>

пусть: сообщение синтаксис позволяет родительскому компоненту получить доступ к сообщение slot prop, предоставляемый дочерним компонентом. div теги сообщение переменная – это данные из сообщение слот реквизит.

Обратите внимание, что вы не ограничены одним реквизитом слота, вы можете передать несколько реквизитов слота по мере необходимости:

<script>
let user = {
firstName: 'John',
lastName: 'Doe'
};
script>

<main>
This is the child component
<slotfirstName={user.firstName}lastName={user.lastName}>slot>
main>

В родительском компоненте:

<script>
import Component from "./Component.svelte";
script>

<main>
This is the parent component
<Componentlet: firstNamelet: lastName>
<div>
The user's name is {firstName} {lastName}
div>
Component>
main>

Работа с именованными слотами

Вы можете использовать именованные слоты, если хотите передать в компоненты несколько слотов. Именованные слоты упрощают управление различными слотами, поскольку каждому слоту можно присвоить уникальное имя. С помощью именованных слотов вы можете создавать сложные компоненты с различной компоновкой.

Чтобы создать именованный слот, передайте имя опора на слот элемент:

<div>
This is the child component

<p>Header: <slotname='header'>slot>p>
<p>Footer: <slotname='footer'>slot>p>
div>

В этом примере есть два именованных слота, слот с именем заголовок и слот с названием нижний колонтитул. Используя слот prop, вы можете передавать содержимое в каждый слот из родительского компонента.

Например:

<script>
import Component from "./Component.svelte";
script>

<main>
This is the parent component
<Component>
<spanslot="header">This will be passed to the header slotspan>
<spanslot="footer">This will be passed to the footer slotspan>
Component>
main>

Этот код демонстрирует, как вы используете слот prop для передачи контента в именованные слоты. Во-первых охватывать тег, вы передаете слот реквизит со значением заголовок. Это гарантирует, что текст внутри охватывать тег будет отображаться в заголовок слот. Аналогично, текст внутри охватывать тег с слот стоимость реквизита нижний колонтитул будет рендериться в нижний колонтитул слот.

Понимание переадресации слотов

Переадресация слотов — это функция в Svelte, которая позволяет передавать контент из родительского компонента через компонент-оболочку в дочерний компонент. Это может быть очень полезно в тех случаях, когда вы хотите передать контент из несвязанных компонентов.

Вот пример использования переадресации слотов: сначала создайте дочерний компонент:

<main>
This is the child component
<slotname="message">slot>
main>

Далее вы создаете компонент-оболочку:

<script>
import Component from "./Component.svelte";
script>

<main>
<Component>
<divslot='message'>
<slotname="wrapperMessage">slot>
div>
Component>
main>

В этом блоке кода вы передаете еще один именованный слот в сообщение слот дочернего компонента.

Затем в родительском компоненте напишите этот код:

<script>
import Wrapper from "./Wrapper.svelte";
script>

<main>
This is the parent component
<Wrapper>
<divslot="wrapperMessage">
This is from the parent component
div>
Wrapper>
main>

В приведенной выше структуре содержимое «Это из родительского компонента» передается через компонент-оболочку непосредственно в дочерний компонент благодаря оберткаСообщение слот внутри компонента-обертки.

Сделайте свою жизнь проще с помощью игровых автоматов Svelte

Слоты — это мощная функция в Svelte, которая позволяет создавать легко настраиваемые и многократно используемые компоненты. Вы узнали, как создавать базовые слоты, именованные слоты, использовать реквизиты слотов и т. д. Понимая различные типы слотов и способы их использования, вы можете создавать динамичные и гибкие пользовательские интерфейсы.