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

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>