Svelte 3: Introdução a Reatividade

Aplicativos web aprimorados ciberneticamente

Eduardo Rabelo
3 min readMay 25, 2019

Nós falamos sobre os primeiros passos para começar com o Svelte 3, mas naquele post inicial eu propositalmente omiti um dos recursos mais importantes do Svelte: reatividade.

A reatividade tem sido a última moda nos últimos anos para estruturas modernas de interface de usuário com JavaScript. Reatividade significa que os valores alterados serão automaticamente refletidos no DOM.

O Angular permite a programação reativa graças ao RxJS e as Observables, e o Vue.js permite recomputar valores de forma reativa com Computed Properties. No Svelte, ele faz uso de um recurso de JavaScript não muito conhecido chamado de labels, permitindo declarações reativas e condições reativas. Isso significa que você pode ter certos valores que serão recalculados automaticamente quando outros valores forem alterados. Isso é realmente poderoso e, como você verá, o Svelte facilita a tarefa. 🥧

Criando um contador de palavras

Vamos ver como é a reatividade no Svelte construindo um exemplo de contador de palavras.

Aqui está o nosso componente:

$ touch src/WordCounter.js

E colocamos:

<script>
let text = '';
</script>

<style>
textarea {
width: 100%;
background: aliceblue;
font-size: 2rem;
}
</style>

<textarea bind:value={text} rows="10" />

Nada muito especial aqui, exceto pela ligação bidirecional entre o valor text e o valor do textarea.

Declarações Reativas

Agora vamos adicionar uma declaração reativa para calcular automaticamente o número de palavras e caracteres quando o valor da variável text for alterado:

<script>
let text = '';

$: characters = text.length;
$: words = text.split(' ').length;
</script>

<style>
textarea {
width: 100%;
background: aliceblue;
font-size: 2rem;
}
</style>

<textarea bind:value={text} rows="10" />

<p>Character Count: {characters}</p>
<p>Word Count: {words}</p>

Declaramos duas novas variáveis: characters e words, que calculam um valor com base no valor interno text e que será automaticamente recalculado.

A parte ‌$: é um label perfeitamente válido em JavaScript. Provavelmente, você não usou labels em JavaScript antes, eles são usados ​​para casos extremos com loops for aninhados. Svelte dá às declarações rotuladas um significado especial e automaticamente instrumenta a reatividade da declaração.

Condições Reativas

Essa reatividade usando a sintaxe de rótulo não é válida apenas para declarar novas variáveis, mas também pode ser usada para executar instruções de maneira reativa quando um valor é alterado.

Vamos registrar o valor text para o console quando ele mudar:

<script>
let text = "";

$: characters = text.length;
$: words = text.split(" ").length;

$: console.log("your text:", text);
</script>

<style>
textarea {
width: 100%;
background: aliceblue;
font-size: 2rem;
}
</style>

<textarea bind:value={text} rows="10" />

<p>Character Count: {characters}</p>
<p>Word Count: {words}</p>

Imagine como isso pode ser útil para depurar aplicativos!

Múltiplas declarações

Você pode agrupar várias instruções em um bloco usando chaves:

$: {
console.log("---");
console.log("your text:", text);
}

Declarações condicionais

E você pode até usar condicionais como sua declaração:

$: if (text.toLowerCase().includes("see you later alligator")) {
console.log("Not so soon baboon!");
text = "";
}

Agora toda vez que nossa variável text contiver a stringsee you later alligator”, uma mensagem é registrada no console e nós redefinimos o valor da variável text.

Com isso, você pode continuar e tornar seus aplicativos Svelte reativos!

Créditos ⭐️

--

--

No responses yet