Menos lógica significa menos bugs, o template orientado a dados é apenas dados, bem chato como alguns objetos. É bem simples, tanto que é chato, então é improvável que os bugs venham de lá.

Um conceito que gosto de seguir nos meus componentes é torná-los orientados à dados.

Em vez de escrever um modelo que se repete assim:

<template>
  <div>
    <TrickItem @click="homeMethod"> Home </TrickItem>
    <TrickItem @click="postsMethod"> Posts </TrickItem>
    <TrickItem @click="improveMethod" promote> Como ser um programador melhor </TrickItem>
  </div>
</template>

Você pode refatorar o template, para usar a configuração e direcioná-lo.

Então no template teremos algo assim:

<template>
  <div>
    <TrickItem
      v-for="item in trickItems"
      :key="item.text"
      :modal="item.modal"
      @click="item.action"
    >
      {{ item.text }}
    </TrickItem>
  </div>
</template>

E no script:

<script>
const homeMethod = () => {}
const postsMethod = () => {}
const improveMethod = () => {}

const trickItems = [
  {
    text: 'Home',
    action: homeMethod,
  },
  {
    text: 'Posts',
    action: postsMethod,
  },
  {
    text: 'Como ser um programador melhor',
    action: improveMethod,
    promote: true,
  },
]
</script>

🧐 Não temos menos código, mas temos um código mais simples:

  • É mais fácil ler a configuração: ler o código no html é complicado porque você precisa descobrir o que a lógica está fazendo, mas a configuração separada é muito simples de entender.
  • Menos lógica significa menos bugs: a configuração acima é apenas um array bem chato com alguns objetos. É bem simples, tanto que é chato, então é improvável que os bugs venham de lá.
  • Componentes dinâmicos são mais flexíveis: como fizemos esse componente renderizar dinamicamente os diferentes itens, ganhamos uma tremenda flexibilidade com a sua reutilização.