Introdução ao BlokJS – Zero-Build
O BlokJS é um framework de UI reativo que não requer configuração, bundler ou compilador. Com ele, você pode começar a desenvolver aplicativos reativos rapidamente, sem necessidade de configurar ou compilar nada. Além disso, o BlokJS é leve, com apenas 9 KB gzipped, e não depende de outras bibliotecas, tornando-o uma escolha ideal para protótipos, MVPs, ferramentas internas e pequenos aplicativos.
Filosofia do BlokJS
O BlokJS é construído em torno de algumas ideias principais:
Sem Etapa de Build
Um framework que precisa de um compilador antes de poder rodar já adicionou complexidade. O BlokJS é uma aplicação de JavaScript plano que é executado diretamente no navegador. Embora você possa usar um bundler para organizar seu código em arquivos se desejar, isso nunca é uma exigência.
Baterias Incluídas, Mas Não Pesadas
O BlokJS inclui estados reativos, componentes, rotas, armazenamento e rastreamento de operações assíncronas, tudo integrado em um único pacote de 9 KB. Isso significa que você não precisa montar cinco bibliotecas separadas para ter todas as funcionalidades que precisa.
Simplicidade em Vez de Complexidade
A superfície de API do BlokJS é pequena por design. Não há diretivas especiais, ciclo de vida, sintaxe específica do framework para aprender. Se você sabe JavaScript, você já sabe a maior parte do BlokJS.
Atualizações Diretas do DOM
Em vez de diferençar uma árvore virtual e patchar o DOM real, o BlokJS rastreia exatamente quais estados cada vinculação depende e atualiza apenas aquela vinculação quando o estado mudar. Isso evita o overhead de um ciclo de diferença/patch completo, tornando atualizações direcionadas rápidas e previsíveis.
Exemplo de Contador em 15 Linhas
Para demonstrar a simplicidade do BlokJS, vamos criar um exemplo básico de contador que atualiza automaticamente quando o usuário clica nos botões de incremento e decremento.
Instalação e Configuração
Para começar, você precisará incluir o BlokJS no seu arquivo HTML. Você pode fazê-lo diretamente do CDN:
<script src="https://cdn.jsdelivr.net/npm/@maleta/blokjs/dist/blokjs.min.js"></script>
Código do Contador
Agora, vamos criar o nosso contador. Em um arquivo JavaScript, você pode adicionar o seguinte código:
<div id="app"></div>
<script>
blok.mount('#app', {
state: { count: 0 },
methods: {
inc() { this.state.count++ },
dec() { this.state.count-- },
},
view: ($) => ({
div: {
children: [
{ h1: { text: $.state.count } },
{ button: { onclick: $.dec, text: '-' } },
{ button: { onclick: $.inc, text: '+' } },
] }
})
});
</script>
Resultado
Com esses poucos códigos, você já tem um contador reativo funcionando sem a necessidade de configuração ou build. O BlokJS cuida de tudo para você.
Por que Objetos em vez de JSX ou Templates?
O BlokJS usa objetos em vez de JSX ou templates porque é mais simples e direto, permitindo que os desenvolvedores usem apenas JavaScript puro sem necessidade de aprender uma nova sintaxe.
Benefícios da Abordagem de Objetos
Ao usar objetos, o BlokJS oferece vários benefícios, incluindo:
* Simplicidade: Sem a necessidade de aprender uma nova sintaxe, os desenvolvedores podem se concentrar em escrever código JavaScript puro.
* Direto: A abordagem de objetos é mais direta e fácil de entender, eliminando a complexidade de JSX ou templates.
* Flexibilidade: Objetos podem ser facilmente manipulados e alterados, permitindo que os desenvolvedores criem interfaces de usuário personalizadas.
Componentes – Não um Brinquedo
O BlokJS tem um sistema de componentes que inclui props, eventos, slots e hooks de ciclo de vida, tornando-o uma ferramenta poderosa para criar interfaces de usuário complexas.
Definindo Componentes
Para criar um componente, você pode usar a função `blok.component()`. Por exemplo:
block.component('TodoItem', {
props: ['todo'],
methods: {
remove() { this.emit('remove', this.todo) }
},
view: ($) => ({
li: {
children: [
{ input: { type: 'checkbox', model: $.todo.done } },
{ span: { text: $.todo.text } },
{ button: { onclick: () => this.remove(), text: 'x' } },
]
}
})
})
Lojas – Estado Global com Rastreamento de Async Automático
O BlokJS fornece um sistema de lojas que permite gerenciar o estado global da aplicação e rastrear automaticamente operações assíncronas, tornando mais fácil lidar com carregamento e erros.
Definindo uma Loja
Para criar uma loja, você pode usar a função `blok.store()` e passar o nome da loja e um objeto com as propriedades e métodos da loja. Por exemplo:
blok.store('auth', {
state: { user: null },
computed: {
isLoggedIn() { return this.state.user !== null }
},
actions: {
async login(email, password) {
try {
const res = await fetch('/api/login', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ email, password }),
})
if (res.ok) {
const userData = await res.json()
this.state.user = userData
} else {
throw new Error('Login failed')
}
} catch (error) {
throw new Error('Login failed')
}
},
logout() {
this.state.user = null
}
}
})
Roteamento – Construído
O BlokJS inclui um sistema de roteamento que permite criar rotas, parâmetros dinâmicos, guardas e modos de hash e história, tudo sem a necessidade de uma biblioteca de roteamento separada.
Definindo Rotas
Para definir rotas no BlokJS, você pode utilizar a propriedade `routes` no objeto `blok.mount`. Por exemplo:
blok.mount('#app', {
routes: [
{ path: '/', component: 'Home' },
{ path: '/product/:id', component: 'ProductDetail' },
{ path: '/admin', component: 'Admin', guard: 'requireAuth' },
{ path: '*', component: 'NotFound' },
]
})
Segurança
O BlokJS é projetado com segurança em mente, com recursos como binding de texto seguro e validação de URLs para prevenir ataques de XSS e CSRF.
Binding de Texto Seguro
O BlokJS utiliza o atributo `textContent` para renderizar o conteúdo de texto, o que significa que qualquer HTML presente no texto será renderizado como texto literal, evitando assim ataques de XSS.
{ "text": "$.name" }
O que o BlokJS não é
O BlokJS não é uma substituição para frameworks como React, Angular ou Vue para dashboards empresariais complexos, mas é ideal para protótipos, ferramentas internas, aplicativos pequenos e médios e aprendizado.
Limitações do BlokJS
O BlokJS não tem suporte a renderização servidor-side (SSR) no momento, embora isso possa ser adicionado no futuro. Além disso, o BlokJS não utiliza um Virtual DOM, optando por atualizações diretas do DOM em vez disso.
Quando usar o BlokJS
O BlokJS é uma escolha ideal para:
* Protótipos e MVPs onde você precisa algo pronto rapidamente
* Ferramentas internas e painéis de administração
* Aplicativos pequenos e médios, como listas de tarefas, dashboards e formulários
* Aprendizado, pois a API do BlokJS é fácil de aprender e se lembrar
* Embutir UI reativa em qualquer página existente