Если у нас есть что-то вроде Tooltip
класса, которому нужно создать экземпляр экземпляра, обновить этот экземпляр и уничтожить этот экземпляр синхронно с моментом монтирования, обновления и уничтожения компонента (как показано в коде ниже),кажется, есть два способа сделать это:
- Использование
use:action
- Использование
onMount
и onDestroy
use:action
метод кажется более чистым, но помимо этого, есть ли какие-либо принципиальные различия между этими двумя методами, которые бы сделали один предпочтительным по сравнению с другим в определенных ситуациях?
Пример использования use:action
:
<script>
import Tooltip from './tooltip'
export let text = ''
function initTooltip(node, text) {
const tooltip = Tooltip(node)
tooltip.text = text
return {
update(text) {
tooltip.text = text
},
destroy() {
tooltip.destroy()
}
}
}
</script>
<div use:initTooltip={text}>
<slot></slot>
</div>
Пример использования onMount
и onDestroy
:
<script>
import Tooltip from './tooltip'
import { onMount, onDestroy } from 'svelte'
export let text = ''
let node
let tooltip
onMount(() => {
tooltip = Tooltip(node)
tooltip.text = text
})
$: if (tooltip && tooltip.text !== text) {
tooltip.text = text
}
onDestroy(() => {
if (tooltip) {
tooltip.destroy()
}
})
</script>
<div bind:this={node}>
<slot></slot>
</div>