Javascript 苗条、事件调度器或作为值的函数?使用什么?
阅读这个令人惊叹的模式示例的代码:如果我使用:Javascript 苗条、事件调度器或作为值的函数?使用什么?,javascript,events,event-handling,svelte,svelte-3,Javascript,Events,Event Handling,Svelte,Svelte 3,阅读这个令人惊叹的模式示例的代码:如果我使用: createEventDispatcher()带有类似于on:close={()=>doSomething()}或 只需将函数作为值传递,如action={doSomething} 同样在第一种情况下,我不能在插槽上使用on:close={…},对吗 如果我尝试,它会给我以下错误:[!](plugin svelte)ValidationError:不能有指令 您建议使用什么?传递回调是最简单的方法。光。简单。在大多数情况下,回调可以做到这一点,在我
createEventDispatcher()
带有类似于on:close={()=>doSomething()}
或action={doSomething}
插槽上使用on:close={…}
,对吗
如果我尝试,它会给我以下错误:[!](plugin svelte)ValidationError:不能有指令
您建议使用什么?传递回调是最简单的方法。光。简单。在大多数情况下,回调可以做到这一点,在我看来,回调更可取
但是,您只能传递一个回调,而同一事件上可以有多个侦听器
<script>
import { onMount } from 'svelte'
import Beeper from './Beeper.svelte'
let beeper
onMount(() => {
const disposes = [
beeper.$on('beep', () => console.log('dynamic A')),
beeper.$on('beep', () => console.log('dynamic B'))
]
return () => disposes.forEach(fn => fn())
})
</script>
<Beeper on:beep={() => console.log('inline')} bind:this={beeper} />
事件也更容易代理:
<script>
import Beeper from './Beeper.svelte'
export let onBeep
</script>
<Beeper {onBeep} />
Proxy.svelte
<script>
import Beeper from './Beeper.svelte'
</script>
<Beeper on:beep />
<script>
import Proxy from './Proxy.svelte'
</script>
<Proxy on:beep={() => console.log('beep')} />
<script>
import Beeper from './Beeper.svelte'
</script>
<!-- callbacks are all in the $$props bag, but I have to know every
event that I want to proxy -->
<Beeper {...$$props} on:beep />
另一方面,事件可能会成为代理的麻烦:
<script>
import Beeper from './Beeper.svelte'
export let onBeep
</script>
<Beeper {onBeep} />
Proxy.svelte
<script>
import Beeper from './Beeper.svelte'
</script>
<Beeper on:beep />
<script>
import Proxy from './Proxy.svelte'
</script>
<Proxy on:beep={() => console.log('beep')} />
<script>
import Beeper from './Beeper.svelte'
</script>
<!-- callbacks are all in the $$props bag, but I have to know every
event that I want to proxy -->
<Beeper {...$$props} on:beep />
传递回调是最简单的方法。光。简单。在大多数情况下,回调可以做到这一点,在我看来,回调更可取
但是,您只能传递一个回调,而同一事件上可以有多个侦听器
<script>
import { onMount } from 'svelte'
import Beeper from './Beeper.svelte'
let beeper
onMount(() => {
const disposes = [
beeper.$on('beep', () => console.log('dynamic A')),
beeper.$on('beep', () => console.log('dynamic B'))
]
return () => disposes.forEach(fn => fn())
})
</script>
<Beeper on:beep={() => console.log('inline')} bind:this={beeper} />
事件也更容易代理:
<script>
import Beeper from './Beeper.svelte'
export let onBeep
</script>
<Beeper {onBeep} />
Proxy.svelte
<script>
import Beeper from './Beeper.svelte'
</script>
<Beeper on:beep />
<script>
import Proxy from './Proxy.svelte'
</script>
<Proxy on:beep={() => console.log('beep')} />
<script>
import Beeper from './Beeper.svelte'
</script>
<!-- callbacks are all in the $$props bag, but I have to know every
event that I want to proxy -->
<Beeper {...$$props} on:beep />
另一方面,事件可能会成为代理的麻烦:
<script>
import Beeper from './Beeper.svelte'
export let onBeep
</script>
<Beeper {onBeep} />
Proxy.svelte
<script>
import Beeper from './Beeper.svelte'
</script>
<Beeper on:beep />
<script>
import Proxy from './Proxy.svelte'
</script>
<Proxy on:beep={() => console.log('beep')} />
<script>
import Beeper from './Beeper.svelte'
</script>
<!-- callbacks are all in the $$props bag, but I have to know every
event that I want to proxy -->
<Beeper {...$$props} on:beep />
这回答了你的问题吗?这回答了你的问题吗?