Tenho este componente svelte que atualmente está usando a use:
diretiva de svelte runes:
<script>
import {route} from "@mateothegreat/svelte5-router";
let {children, className, ...rest} = $props();
</script>
<a
use:route
class={`btn ${className}`}
{...rest}
>
{@render children()}
</a>
Ao tentar passá-lo como prop, recebo um erro de renderização: "Svelte: Este tipo de diretiva não é válido em componentes". Aqui está como estou tentando usar a diretiva como prop:
<ButtonLink
onclick={() => $currentRoute = window.location.pathname}
href={href}
class:active={isActive}
>
O class:active={isActive}
está dando o erro. Existe uma maneira de passar o uso de diretivas para um componente em runas svelte? Se sim, como e o que estou fazendo errado?
use:
não pode ser usado em componentes, mas esse não é o problema aqui, poisa
é um elemento.class:
também não pode ser usado em componentes, então você tem que contornar isso.Desde o Svelte 5.16 você pode passar classes como objetos/arrays que usam
clsx
internamente. Então aqui você pode passar um objeto usando o flag:Parque infantil
Se você não estiver usando esse mecanismo, você terá que transformar manualmente o sinalizador em uma string de classe, por exemplo, no seu exemplo
Em relação ao
class
atributo em componentes: Você também pode obtê-lo de props rest/all the props, desde que a propagação aconteça antes de definir a classe manualmente, dessa forma ele será sobrescrito com a combinação correta de classes locais e passado em algumas. Por exemplo