- Baseada no padrão de Web Components, adiciona apenas reatividade, templates declarativos e o mínimo de boilerplate
- Tamanho pequeno, na casa de 5 KB, com renderização rápida, atualizando apenas as partes alteradas da UI para otimizar desempenho e velocidade de carregamento
- Todos os componentes Lit são Web Components nativos e podem ser reutilizados em qualquer lugar onde HTML seja suportado, independentemente do framework
- Usa Shadow DOM para limitar o escopo dos estilos por padrão, simplificando seletores CSS e evitando conflitos com outros estilos
- Com Reactive Property, modela a API do componente e o estado interno, oferecendo rerenderização eficiente quando as propriedades mudam
- Templates baseados em Tagged Template Literals são rápidos e simples
- Pode ser usado em diversos projetos web, de componentes compartilháveis e sistemas de design até a construção de aplicativos completos com menos dependência de fornecedores e manutenção reforçada
- Oferece tutorial
- GitHub
4 comentários
Sinto isso há uns 3 anos: para usar Web Components vanilla direto, parece rápido e também um framework de transição excessivo. É lento..
O que isso quer dizer?
Estamos desenvolvendo ferramentas de operação usando apenas o padrão web de Web Components e o
lit-html, e isso é ótimo porque a quantidade de informação que precisamos conhecer é mínima. Nolit-html, usamos basicamente só binding de event handlers e loop templating. (No restante, o padrão web já é suficiente...) Existe o inconveniente de precisar chamarrendermanualmente quando há mudanças, mas, por outro lado, em vez de um comportamento implícito que detecta automaticamente a alteração de variáveis, também há vantagens no fato de a chamada explícita ajudar. Como são ferramentas de operação, talvez eu pense assim porque lidar com diversos ambientes não é uma prioridade tão alta.Comentários do Hacker News
Já estávamos usando um framework pesado, e alguém adicionou Lit só para colocar mais uma linha no currículo, o que virou um grande peso
O Shadow DOM, em especial, tornou os problemas de acessibilidade (A11y) ainda mais graves. Como o escopo de
idfica separado, ligações comolabel-foredescribe-byquebravam, e isso deu muito trabalhoClaro, em parte isso também era um problema de falta de habilidade da nossa equipe
O estilo fica com escopo, mas partes importantes como tamanho da fonte são exceção, então toda substituição acabava gerando pequenos bugs de regressão
A DX também piorou bastante; espero que o tooling melhore, mas no momento a situação só cansa
Na prática, parece mais comum alguém introduzir algo novo simplesmente porque quer experimentar, sem muita racionalização
Funcionou bem em apps complexos, com componentes aninhados interagindo entre si, e lembra React, mas é muito mais nativo do navegador, tem menos boilerplate e renderiza mais rápido
Chega a ser difícil entender por que Lit não é mais popular
As funcionalidades centrais são surpreendentemente simples, e a maior parte depende das APIs da plataforma
Por isso qualquer um pode implementar por conta própria, e acho que essa simplicidade tem muito valor
Como referência, a implementação alternativa que fiz está em https://github.com/ruphin/lite-html
lit-htmlé realmente muito útil, então uso em quase todos os meus projetos pessoaisPoder carregar direto via CDN e experimentar sem etapa de build também é uma grande vantagem
Não é pesado como outros frameworks; parece só Vanilla JS + HTML, então a carga cognitiva é mínima
Shadow DOM é basicamente uma árvore privada que isola o DOM interno de um componente
Isso torna possível o conceito de slots, permitindo criar componentes realmente composáveis
O problema é que o encapsulamento de estilo vira uma grande barreira ao integrar com sistemas existentes
Por isso propus algo chamado Open Styleable Shadow Roots, que permite que estilos externos entrem no interior sem perder os slots. Ainda estou tentando convencer os fabricantes de navegadores
Também escrevi sobre isso aqui: https://medium.com/gitconnected/getting-started-with-web-com...
Às vezes até me pergunto por que ele não é mais amplamente usado
Originalmente ele era baseado em Backbone.js, e foi sendo substituído gradualmente na sequência
lit-html → lit-element → litHoje é fornecido como um Web Component chamado
<converse-root />, então se integra bem até com outros frameworks, como ReactGitHub: https://github.com/conversejs/converse.js / demo: https://chat.conversejs.org/
Se você usar no servidor um sistema de templates tipo JSX, já fica bom o bastante, e no cliente continua sendo só JS, sem preocupação com upgrades
Só que as APIs nativas são muito baixo nível, então a DX deixa a desejar, e o Lit adiciona uma camada de reatividade declarativa por cima
Resolve de forma elegante partes que seriam chatas de implementar manualmente
htmldo Lit e JSXNa verdade, JSX é até mais trabalhoso porque exige uma etapa de compilação
No começo eu criava Web Components diretamente em um ambiente sem dependências, mas depois que migrei para LitElement ficou muito mais confortável
Só que o Shadow DOM, apesar de ser o padrão, às vezes cria ainda mais problemas; hoje uso LitElement sem Shadow DOM
A maior vantagem é estar em cima de uma base estável
Como Web Components nativos têm suporte estável em todos os navegadores, dá para focar no desenvolvimento sem risco de precisar trocar de framework
Queria que mais equipes tentassem
Aliás, também recomendo este vídeo do HTTP 203 sobre Lit
Angular é pesado demais, e React parece ter sido desenhado para limitações de navegadores antigos e hoje se sustenta mais por inércia
Em comparação com o boilerplate do Angular ou a complexidade dos hooks do React, ele é muito mais intuitivo
Pena que não tenha ficado popular
Na prática, acho que a combinação
+ Web Componentsjá bastaMas fico me perguntando que vantagem haveria em refazê-los com Lit em vez de Vue
O gerenciamento de estado com ref/reactive do Vue 3 é poderoso, e dá para testar sem depender do DOM
A reatividade do Lit é no nível do widget, então você precisa gerenciar manualmente os gatilhos de atualização
No Vue o ciclo de vida é simples, enquanto no Lit é preciso prestar atenção em vários callbacks, o que facilita o surgimento de bugs
A menos que exista um motivo especial, é melhor focar no desenvolvimento de funcionalidades, porque trocar a stack quase não afeta o usuário
Vue é um framework, então tem mais recursos; Lit implementa mais perto das APIs nativas
Vue exige build, mas Lit pode ser carregado em runtime
Vue também pode compilar para outros alvos, enquanto Lit é voltado só para Web Components, então fica mais limpo
No fim, o mais importante é usar a tecnologia com a qual a equipe tem mais familiaridade
Quem consome não liga para a implementação interna; o que importa é tamanho e API
De qualquer forma, outras pessoas vão acabar criando adaptadores para usar no ambiente delas