svelte/action
Action
Une “action” est une fonction qui est appelée lorsqu’un élément est créé.
Vous pouvez utiliser cette interface pour les typer.
L’exemple qui suit définit une action qui ne fonctionne que sur des éléments <div>
et prend en
argument optionnel un paramètre qui a une valeur par défaut :
export const const myAction: Action<HTMLDivElement, {
someProperty: boolean;
} | undefined>
myAction: type Action = /*unresolved*/ any
Action<HTMLDivElement, { someProperty: boolean
someProperty: boolean } | undefined> = (node: any
node, param: {
someProperty: boolean;
}
param = { someProperty: boolean
someProperty: true }) => {
// ...
}
Action<HTMLDivElement>
et Action<HTMLDivElement, undefined>
signalent tous les deux que l’action
n’accepte pas de paramètre.
Vous pouvez renvoyer depuis la fonction un objet avec les méthodes update
et destroy
, et typer
d’éventuels attributs et évènements additionnels.
Voir l’interface ActionReturn
pour plus de détails.
interface Action<
Element = HTMLElement,
Parameter = undefined,
Attributes extends Record<string, any> = Record<
never,
any
>
> {…}
<Node extends Element>(
...args: undefined extends Parameter
? [node: Node, parameter?: Parameter]
: [node: Node, parameter: Parameter]
): void | ActionReturn<Parameter, Attributes>;
ActionReturn
Les actions peuvent renvoyer un objet contenant les deux propriétés définies dans cette interface. Les deux sont optionnelles.
update
: une action peut avoir un paramètre. Cette méthode sera appelée lorsque ce paramètre sera mis à jour, immédiatement après que Svelte aura appliqué les changements sur le markup.ActionReturn
etActionReturn<undefined>
signifient tous les deux que l’action n’accepte pas de paramètre.destroy
: méthode qui est appelée juste après le démontage de l’élément.
De plus, vous pouvez préciser quels attributs et évènements additionnels l’action permet sur l’élément concerné. Ceci ne s’applique que sur les types TypeScript et n’a aucun effet lors de l’exécution.
Exemple d’utilisation :
interface Attributes {
Attributes.newprop?: string | undefined
newprop?: string;
'on:event': (e: CustomEvent<boolean>
e: interface CustomEvent<T = any>
CustomEvent<boolean>) => void;
}
export function function myAction(node: HTMLElement, parameter: Parameter): ActionReturn<Parameter, Attributes>
myAction(node: HTMLElement
node: HTMLElement, parameter: Parameter
parameter: type Parameter = /*unresolved*/ any
Parameter): type ActionReturn = /*unresolved*/ any
ActionReturn<type Parameter = /*unresolved*/ any
Parameter, Attributes> {
// ...
return {
update: (updatedParameter: any) => void
update: (updatedParameter: any
updatedParameter) => {...},
destroy: () => {...}
};
}
interface ActionReturn<
Parameter = undefined,
Attributes extends Record<string, any> = Record<
never,
any
>
> {…}
update?: (parameter: Parameter) => void;
destroy?: () => void;
Modifier cette page sur Github