Javascript

Podemos querer usar JavaScript para aplicar o mesmo comportamento a múltiplos módulos ou componentes.

Por exemplo, podemos usar um construtor Recolhedor que alterna a visibilidade de um elemento.

Há duas abordagens que podemos tomar, ambas complementando a abordagem CSS que discutimos nos capítulos anteriores.

1. Encapsulando o estado ao módulo

Para fazer isso, precisamos especificar uma classe de estado específico de módulo ao construtor da seguinte forma:

var modulo1Recolhedor = new Recolhedor(elemento1, {
	cssClasseEscondido: 'moduloA-escondido' 
});

var modulo2Recolhedor = new Recolhedor(elemento2, {
	cssClasseEscondido: 'moduloB-escondido' 
});

Então, reusar o estilo CSS da seguinte maneira:

.moduloA-escondido,
.moduloB-escondido {
	display: none;
}

O dilema é que essa lista pode crescer rapidamente (ou você pode usar um mixin). E cada vez que adicionamos um comportamento, precisamos atualizar o CSS. Uma pequena mudança, mas ainda assim uma mudança. Neste caso, podemos considerar uma classe de estado global.

2. Criando uma classe de estado global

Se nos encontrarmos repetindo exatamente o mesmo conjunto de estilos para múltiplos módulos, talvez seja melhor usar uma classe de estado global deste modo:

.estadoGlobal-escondido {
	display: none;
}

Esta abordagem elimina a longa lista delimitada por vírgula. E não precisamos mais especificar a classe do módulo ao criar uma instância. Isto ocorre porque a classe global será referenciada internamente.

var modulo1Recolhedor = new Recolhedor(elemento1);
var modulo2Recolhedor = new Recolhedor(elemento2);

Porém, essa abordagem nem sempre faz sentido. Podemos ter dois módulos diferentes que se comportam da mesma forma, mas têm um aparência diferente, o qual é algo que discutimos em Estados.

3. O melhor dos dois mundos

Poderíamos combinar as duas abordagens ao padronizar a classe para a classe de estado global. E então, somente quando necessário, podemos especificar uma classe durante a instanciação, como mostrado no primeiro exemplo acima.

Conclusão

Quando pensamos sobre estado, particularmente com a nossa visão de Javascript, precisamos considerar como esse estado afeta o comportamento, bem como o estilo. Diferentes componentes podem compartilhar o mesmo comportamento, mas eles podem parecer bastante diferentes. Após uma consideração cuidadosa, podemos escolher a solução certa para o problema.

Capítulos

  1. Introdução
  2. Semântica
  3. Reuso
  4. IDs
  5. Convenções
  6. Módulos
  7. Estados
  8. Modificadores
  9. Versionamento
  10. Javascript
  11. Organização
  12. FAQs