O último lançamento da biblioteca Bemtv veio com recursos interessantes, o mais marcante deles a sintaxe possibilitada pelos SuperComponents.
Por que SuperComponent?
Um dos objetivos de criar componentes é poder utilizá-los muitas vezes em sua aplicação. Com o SuperComponent, internamente, cada vez que o componente é usado, cria-se uma instância leve que gerência essa nova renderização do componente. Essas instâncias assumem o “controle”, sempre que ocorre uma ação nelas, onde a reação é a execução de um callback passado anteriormente, normalmente em Hooks e eventos do DOM.
Um breve olhar
Componente Counter:
import { _ } from "bemtv"; const { click$, $, css, template, render } = _`Counter`({ count: 0 }); click$(() => $.count++); css` padding: 20px; color: blue; `; template`button[Clicked: $count ]`; render();
Logo, vemos que não precisamos envolver a lógica do componente em uma função como de costume, então a sintaxe parece melhor e mais limpa.
Variáveis de componentes(compVars)
No exemplo anterior, passamos um objeto com uma propriedade count
como argumento, este objeto é chamado compVars
e todas as propriedades adicionadas a ele são isoladas a cada renderização do componente, incluindo estruturas de dados como Array, Set, Map e Object.
Conhecendo nossas “variáveis”, a Bemtv consegue fornecer açúcares sintáticos realmente doces.
Um exemplo é que podemos adicionar o caminho para a propriedade diretamente no template usando o símbolo $
:
import { _ } from "bemtv"; const { template, render } = _`Counter`({ message: "Hey!" }); template`button[Clicked: $message ]`; render();
Se tivermos uma propriedade com o mesmo nome de um atributo HTML podemos usar o símbolo @
para informar a Bemtv para tratar a propriedade como chave e valor:
import { _ } from "bemtv"; const { template, render } = _`Img`({ src: "avatar.png", alt: "My avatar", }); template`img[ @src @alt ]`; render();
Funções de transformação
As funções de transformação nos permitem adicionar uma “marca” a uma estrutura de dados e informa ao Bemtv para transformar a estrutura de dados somente quando necessário, isso nos permite focar apenas na estrutura de dados.
import { tFn } from "bemtv"; const tListJoin = tFn((list) => list.join(" br[] "));
O exemplo acima cria uma função de transformação que pode ser usada com listas, e quando a lista é solicitada pelo template ele executa essa função e adiciona o resultado ao template:
import { _, tFn} from "bemtv"; const tListJoin = tFn((list) => list.join(" br[] ")); const { template } = _`List`({ list: tListJoin(["user1", "user2", "user3"]), }); template`div[Users: $list ]
Sempre que esta lista for alterada (ex: $.list.push(item)
), A Bemtv detectará e usará a função de transformação novamente e renderizará a alteração.
As funções de transformação podem ser incrivelmente poderosas porque com
Brackethtml
podemos até retornar a marcação com CSS-In-JS.
Router
Um Router é usado para navegação entre visualizações de vários componentes em uma aplicação Bemtv, permite alterar a URL do navegador e mantém a UI sincronizada com a URL:
import { _, router } from "bemtv"; _`Home`().template`Hey!`; _`AboutUs`().template`Hey Again!`; const { template, render } = _`MyPages`(); template` #[] br[]br[] Links: #Home[Click to go home!] #AboutUs[Click to know about us!]`; render();
No exemplo acima, criamos duas rotas(Bemtv cria rotas automaticamente) e fornecemos um local para que elas sejam renderizadas #[]
e também criamos links #Home[ Texto do link ]
, tudo isso em poucas linhas!
Fechamento
Esses são apenas alguns dos novos recursos da biblioteca, caso queira saber mais segue o link para o repositório do projeto: Bemtv.
Obrigado por chegar até aqui!
Top comments (0)