Skip to main content

svelte/action 是给html标签自定义事件?

Svelte 的 action 是一种强大的机制,用于向 HTML 元素添加自定义行为。action 不是事件,而是一个函数,可以在元素创建时、更新时和销毁时执行特定的逻辑。这使得你可以轻松地将特定的行为附加到 DOM 元素上,而无需在组件中编写复杂的逻辑。

基本用法

一个 action 是一个函数,它接收一个元素作为参数,并可以返回一个对象,该对象可以包含一个 update 函数和一个 destroy 函数。

创建一个简单的 action

// actions.js
export function focus(node) {
// 立即使元素获得焦点
node.focus();

return {
// 当元素属性更新时调用
update(newParams) {
// 在这里处理更新逻辑
},
// 当元素被移除时调用
destroy() {
// 在这里清理任何副作用
}
};
}

在组件中使用 action

<script>
import { focus } from './actions.js';
</script>

<input use:focus>

在这个例子中,focus action 会在元素创建时立即使输入框获得焦点。

更复杂的 action

你可以创建更复杂的 action,例如一个可以处理点击外部元素的 action

创建 clickOutside action

// actions.js
export function clickOutside(node) {
const handleClick = event => {
if (!node.contains(event.target)) {
node.dispatchEvent(new CustomEvent('outclick'));
}
};

document.addEventListener('click', handleClick);

return {
destroy() {
document.removeEventListener('click', handleClick);
}
};
}

在组件中使用 clickOutside action

<script>
import { clickOutside } from './actions.js';

function handleOutclick() {
alert('Clicked outside!');
}
</script>

<div use:clickOutside on:outclick={handleOutclick}>
Click outside of this box to trigger an alert.
</div>

在这个例子中,当用户点击元素外部时,会触发一个自定义事件 outclick,并调用 handleOutclick 函数。

总结

Svelte 的 action 提供了一种简洁而强大的方式来向 HTML 元素添加自定义行为。通过 action,你可以在元素创建、更新和销毁时执行特定的逻辑,从而实现更高级的功能。action 可以用于各种场景,例如自动聚焦、点击外部检测、拖放等,使你的组件更加灵活和强大。