Перейти к содержимому

use:

Действия — это функции, которые вызываются, когда элемент монтируется. Они добавляются с помощью директивы use:, и обычно используют $effect, чтобы сбросить любое состояние, когда элемент размонтируется.

App.svelte
<script>
/** @type {import('svelte/action').Action} */
function myaction(node) {
// узел был смонтирован в DOM
$effect(() => {
// настройка происходит здесь
return () => {
// очистка происходит здесь
};
});
}
</script>
<div use:myaction>...</div>

Действие может быть вызвано с аргументом:

App.svelte
<script>
/** @type {import('svelte/action').Action} */
function myaction(node, data) {
// ...
}
</script>
<div use:myaction={data}>...</div>

Действие вызывается только один раз (но не во время серверного рендеринга) — оно не будет выполняться снова, если аргумент изменится.

Интерфейс Action принимает три необязательных аргумента типа — тип узла (который может быть Element, если действие применяется ко всему), параметр и любые пользовательские обработчики событий, созданные действием:

App.svelte
<script>
/**
* @type {import('svelte/action').Action<
* HTMLDivElement,
* undefined,
* {
* onswiperight: (e: CustomEvent) => void;
* onswipeleft: (e: CustomEvent) => void;
* // ...
* }
* >}
*/
function gestures(node) {
$effect(() => {
// ...
node.dispatchEvent(new CustomEvent('swipeleft'));
// ...
node.dispatchEvent(new CustomEvent('swiperight'));
});
}
</script>
<div
use:gestures
onswipeleft={next}
onswiperight={prev}
>...</div>