##
动作
动作是在创建元素时调用的函数。您可以使用此接口输入此类动作。以下示例定义了一个仅适用于`
`元素的动作,并且它可选地接受一个具有默认值的参数:
```ts
export const myAction: Action
= (node, param = { someProperty: true }) => {
// ...
}
```
`操作`和 `Action` 都表示该操作不接受任何参数。
您可以从函数中返回一个具有方法 `update` 和 `destroy` 的对象,并指定它具有哪些附加属性和事件。有关详细信息,请参阅接口 `ActionReturn`。
```dts
interface Action<
Element = HTMLElement,
Parameter = undefined,
Attributes extends Record = Record<
never,
any
>
> {/*…*/}
```
```dts
(
...args: undefined extends Parameter
? [node: Node, parameter?: Parameter]
: [node: Node, parameter: Parameter]
): void | ActionReturn;
```
##
动作返回
操作可以返回一个包含此接口中定义的两个属性的对象。这两个属性都是可选的。
* 更新:一个操作可以有一个参数。每当该参数发生变化时,此方法将被调用,在 Svelte 应用更新到标记之后立即。\``ActionReturn`\`和\``ActionReturn`\`都表示该操作不接受任何参数。
* destroy:元素卸载后调用的方法
此外,您还可以指定动作在应用元素上启用的哪些附加属性和事件。这仅适用于 TypeScript 类型定义,在运行时没有影响。
示例用法:
```ts
interface Attributes {
newprop?: string;
'on:event': (e: CustomEvent) => void;
}
export function myAction(node: HTMLElement, parameter: Parameter): ActionReturn {
// ...
return {
update: (updatedParameter) => {...},
destroy: () => {...}
};
}
```
```dts
interface ActionReturn<
Parameter = undefined,
Attributes extends Record = Record<
never,
any
>
> {/*…*/}
```
```dts
update?: (parameter: Parameter) => void;
```
`destroy?: () => void;`