如何在Svelte组件中对HTML元素进行样式化并重新公开它们的所有事件?(本质上,我正在寻找执行styled-components
的Svelte方式)
例如,我尝试对一个常规的HTML button
进行样式化,并将其公开为一个可重用组件:
<script>
import { createEventDispatcher } from "svelte";
const dispatch = createEventDispatcher();
</script>
<button
on:click={() => dispatch("click")}
on:mouseover={() => dispatch("mouseover")}
{/* ...and so on for every other event */}
>
<slot />
</button>
<style>
button {
/* ... */
}
</style>
有没有什么方法可以避免让button
HTML元素上的每个事件都调用dispatch
来通过父元素传播事件?有更简单的方法吗?
我试过搜索,大多数地方都让我只使用CSS-in-JS,但我不想放弃所有的优化,让我的风格完全用Svelte写(更小的包大小,更好的性能,等等)。
2条答案
按热度按时间xzlaal3s1#
您可以通过列出事件来转发它们,而不需要 * 事件处理程序:
不需要调度,但目前无法自动转发 * 所有 * 事件,仍需列出。(Issue on that)
属性通过
$$restProps
传递,其中包括所有未显式定义的属性(不是事件)。(文件)rsl1atfo2#
您可以使用**$$restProps对象**将按钮的所有事件和属性传递给组件:
脚本
造型
然后像这样使用该组件: