Módulos JS

Em JavaScript, módulos permitem dividir um programa em arquivos separados e independentes, facilitando a organização e reutilização de código. Cada módulo pode exportar variáveis, funções, classes ou objetos, que podem ser importados por outros módulos. Isso resulta em um código mais limpo, fácil de manter e melhora a colaboração em projetos maiores. Um exemplo simples:

export function soma(a, b) {
  return a + b;
}
import { soma } from ./math.js;

console.log(soma(2, 3));

Para obter mais informações, acesse:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules

Componentes

No Vue.js, existe o conceito de componente, que nada mais é do que blocos reutilizáveis de código que representam partes da interface do usuário. Eles permitem dividir uma aplicação em pedaços menores, organizados e independentes, facilitando a manutenção e a reutilização. Nesse sentido, os componentes no Vue pode ser considerados como módulos JavaScript.

Para criarmos um componente Vue em JavaScript podemos fazer o seguinte:

export default {
  name: "MyImage",
};

Esse código exporta um objeto de definição de componente do Vue. O export default { ... } diz ao Vue (e a outros arquivos que importarem) que esse objeto é um componente Vue. A propriedade name: “MyImage” define o nome interno do componente.

Para usar esse componente, inicialmente temos que fazer um import

import MyImage from "./MyImage.js";

E depois adicionar na aplicação Vue:

app.component("my-image", MyImage);

Com isso, temos uma nova tag HTML chamada my-image que renderiza esse componente.

Templates

No Vue.js, o template é a parte do componente onde você descreve a estrutura visual que será renderizada na tela.

export default {
  name: MyImage",
  template: `
    <h1>Hello Template</h1>
  `
};

Propriedades

No Vue.js, props (propriedades) são uma forma de passar dados para um componente.

export default {
  name: "MyImage",
  props: {
    link: {
      type: String,
      required: true,
    },
    description: {
      type: String,
      required: false,
      default: "",
    },
  },

No exemplo acima, são definidas duas propriedades, link e description do tipo String sendo que apenas a primeira é obrigatória. Um exemplo mais realista do componente MyImage poderia ser escrito da seguinte maneira:

export default {
  name: "MyImage",
  props: {
    link: {
      type: String,
      required: true,
    },
    description: {
      type: String,
      required: false,
      default: "",
    },
  },
  template: `
    <div class="card">
      <div class="card-image">
        <figure class="image is-128x128">
          <img
            :src="link"
            alt="description"
          />
        </figure>
      </div>
      <div class="card-content">
        <div class="content">
          <p></p>
        </div>
      </div>
    </div>
  `,
  methods: {
  },
};

V-bind

v-bind é uma diretiva que serve para ligar (bind) atributos de elementos HTML ou props de componentes a valores dinâmicos do Vue (variáveis, expressões ou funções).

Em um componente, se você escrever <img src=“link"> o navegador irá entender que a palavra link como um texto. Porém, escrevendo <img v-bind:src=“link”> o Vue avalia a variável link do componente e coloca o valor correto no atributo src. Note que você pode utilizar : como um atalho para v-bind, por exemplo: <img :src=“link”>.

Emmissão de eventos

Em Vue.js, a emissão de eventos é uma forma de comunicação entre componentes. Um componente filho pode emitir um evento para notificar o componente pai sobre uma ação ou mudança de estado. Isso é feito usando o método $emit.

@click="$emit('image-clicked', description)"

No exemplo acima, quando o elemento é de um componente é clicado ele emite um evento chamado image-clicked, passando a descrição da imagem como argumento.

No componente pai, você pode ouvir esse evento usando a diretiva v-on ou o atalho @. Por exemplo:

<my-image
  link="https://vuejs.org/images/logo.png"
  description="Vue.js Logo"
  @image-clicked="showDescription"
></my-image>

O método showDescription no componente pai é usado para lidar com o evento emitido do componente <my-image>:

methods: {
  showDescription(description) {
    alert(description);
  }
}

Assim, quando a imagem é clicada, o evento image-clicked é emitido pelo componente filho, e o método showDescription no componente pai é chamado, exibindo um alerta com a descrição da imagem.

Exemplo

Para obter um exemplo funcional acesse o endereço:

https://github.com/rodrigoprestesmachado/cpw2/tree/main/exemplos/vue-components

Referências 📚

  • Vue.js - The Progressive JavaScript Framework
Rodrigo Prestes Machado
CC BY 4.0 DEED

Copyright © 2024 RPM Hub. Distributed by CC-BY-4.0 license.