Skip to main content

Criando pequenos componentes dinâmicos com Javascript puro

Porque nem sempre precisaremos de um framework


Substituir o React? Tá maluco?!


Sabe aquela velha historia de que não precisamos utilizar um canhão pra matar um passarinho? Como já devem ter lido muitas vezes, nem sempre precisamos sobrecarregar um projeto com todos os recursos que uma lib oferece, nesse caso podemos optar por alternativas mais leves e com objetivos mais direcionados (como o Preact em relação ao React). Mas e quando o projeto é tão pequeno que nem mesmo a alternativa mais leve vale o esforço?

ES6 Rocks!


O ES6 nos trouxe uma lista enorme de novos e fantásticos recursos além de bons upgrades na sintaxe de alguns recursos já existentes. Um desses novos recursos em particular é extremamente util na criação de componentes dinâmicos: Template Literals (ou Template Strings) e é ele que iremos utilizar nos exemplos a seguir.

O que vamos precisar?


Meu objetivo nesse post é que seja simples o suficiente pra que não precisemos de nenhum tipo de configuração prévia (Nada de babel, Webpack, Gulp, etc). Utilizaremos constantes, arrow functions e template literals que já tem um suporte bastante decente nos browsers modernos. Vocês podem conferir mais sobre o suporte clicando aqui

O que criaremos?


Nada de muito especial, apenas uma lista simples de nomes que será gerada a partir de um array de objetos. Vamos começar?

Primeiro definimos nosso modelo de dados:

const data = [
{name: 'João',id: '1'},
{name: 'Manuel',id: '2'},
{name: 'Pedro',id: '3'},
{name: 'José',id: '4'}
]

Criamos então um elemento de referência em nosso HTML:

<ul data-list></ul>

E este será nosso componente dinâmico:

const listComponent = (data) => {
return data.map((item) => {
return (
`<li><span>${ item.id }</span><span>${ item.name }</span></li>`
)
}).join('')
}


O que fizemos? Primeiro atribuímos a nossa constante uma arrow function que recebe o argumento data. Em seguida invocamos o método map de nosso argumento que por sua vez invocará uma função de callback para cada item em nosso array, como nosso array contém quatro objetos, teremos então quatro elementos de lista em forma de template strings. Utilizamos então um recurso chamado string interpolation (${ data.value }) para inserir os dados de nossos objetos em nossa template. Por fim note acima que utilizamos o método join() após o map, fizemos isso para evitar algumas virgulas indesejadas na conversão do array em string.

Para prosseguir armazenamos nosso elemento HTML em uma constante:

const el = document.querySelector('[data-list]')

E pra finalizar invocamos o método innerHTML chamando a função listComponent(), que receberá nosso array data como argumento:

el.innerHTML = listComponent(data)


Esse tipo de abordagem na criação de componentes simples pode ser bastante útil quando precisamos, por exemplo, popular as options de um select dinamicamente ou criar listas de qualquer tipo.

Um ponto importante: Diferentemente do React e outras UI libs modernas que, em resumo, utilizam um DOM virtual absurdamente veloz, o componente que criamos será inserido no DOM real, que é muito mais lento, por isso recomendo fortemente que utilize-o com moderação.

Comments

Popular posts from this blog

Verificar sequencia de caracteres iguais em uma string c#

Neste post vamos ver como explorar uma string e verificar se existe uma seqüencia de caracteres iguais dentro da string. Utilizaremos a tabela ASCII para verificar letras e números, se você precisar verificar mais caracteres basta consultar a tabela e colocar o número referente na condição. Neste exemplo vou verificar se existe na string uma seqüencia quatro(4) números iguais e o mesmo para uma seqüencia de três(3) letras, pois acho que em números de documentos ou nomes isto não pode acontecer. Tabela de decimal ASCII public static bool ValidaTexto(this string txt) { bool flag = true; if (txt.Length < 3) { flag = false; } else { int contLetras = 0; int contNumeros = 0; int tmp = (int)txt.ToCharArray()[0]; foreach (char c in txt.ToCharArray()) { if (((int)c < 127 && (int)c >= 65)) { if (tmp == (int)c) { contLetras++; } if (contLetras >= 3) { break; } tmp = (int)c; } } //inicia novamente o armazenador tmp =...

CRIANDO APLICATIVOS DO ZERO E FÁCIL!

O QUE VOCÊ VAI APRENDER? SÃO MAIS DE 10 HORAS DE CONTEÚDO PURO E MATERIAIS EXTRAS: CRIAR APLICATIVOS   Mesmo sendo um total iniciante vamos explicar para você como criar aplicativos profissionais. Utilizaremos a linguagem HTML, CSS, Javascript em união com Apache Cordova. MODELO DE NEGÓCIO  Vamos ensinar como ganhar dinheiro* fazendo aplicativos. Apresentamos os 4 pilares básicos para a monetização de um aplicativos e como fazer para ser bem-sucedido. ATENDIMENTO AO CLIENTE - Vamos dar atenção também a parte humana do processo. Como técnicas de atendimento e precificação, para você convencer seus futuros clientes a fechar negócio com você. Veja os módulos do curso aqui POR QUE FAZER ESTE CURSO? CERTIFICAÇÃO PROFISSIONAL A conclusão deste curso oferece certificação profissional válida em todo território nacional. Podendo portanto ser colocado no seu curriculum, com duração total de 10 horas. GARANTIA Se por algum motivo você achar que est...

Criando um filtro de busca customizável com JavaScript funcional

Tutoriais utilizando bibliotecas e frameworks para state management se tornaram comuns. Apesar disso, já que muita gente usa muitos frameworks diferentes, muitas vezes precisamos falar sobre a plataforma que permite isso tudo: a odiadíssima ferramenta que é o JavaScript, na sua forma mais pura — conforme descrito com documentações excelentes como a da MDN . Esse tutorial também pode ser útil para quem está iniciando em JavaScript e desenvolvimento em geral já começar com alguma ideia do que é programação funcional. O termo está se tornando popular e quem não subir nesse barco pode ficar para trás em pouco tempo. Não vamos adentrar nos detalhes do que é programação funcional neste artigo — isso é assunto para outras horas de conversa. Aqui, ficaremos no rápido e simples: alcançar nosso objetivo, evitando mutações dos dados e estado global. Iniciando o projeto Pelo bem da simplicidade, vamos manter tudo num único arquivo, que vai ter essa cara: <!DOCTYPE HTML> ...