/ Gists / 14 always use computed instead of functions
On gists

14 always use computed instead of functions

cdruc vue

old.vue Raw #

<script setup>
import {ref, computed} from "vue";

const people = ref([
  {id: 1, firstName: 'Constantin', lastName: 'Druc'},
  {id: 2, firstName: 'Jack', lastName: 'Dorsey'},
  {id: 3, firstName: 'Bill', lastName: 'Burr'},
  {id: 4, firstName: 'Hugh', lastName: 'Jackman'},
  {id: 5, firstName: 'Tracey', lastName: 'Johnes'},
]);

function fullName(firstName, lastName) {
  console.log('fullName() was executed');
  return firstName + ' ' + lastName;
}
</script>

<template>
  <ul>
    <li v-for="person in people" :key="person.id">
      {{ fullName(person.firstName, person.lastName) }}
    </li>
  </ul>
</template>

new.js Raw #

<script setup>
import {ref, computed} from "vue";

const people = ref([
  {id: 1, firstName: 'Constantin', lastName: 'Druc'},
  {id: 2, firstName: 'Jack', lastName: 'Dorsey'},
  {id: 3, firstName: 'Bill', lastName: 'Burr'},
  {id: 4, firstName: 'Hugh', lastName: 'Jackman'},
  {id: 5, firstName: 'Tracey', lastName: 'Johnes'},
]);

const newPeople = computed(() => {
  console.log('newPeople was executed');

  return people.value.map(person => {
    return {
      ...person,
      fullName: person.firstName + ' ' + person.lastName
    }
  })
});
</script>

<template>
  <ul>
    <li v-for="person in newPeople" :key="person.id">
      {{ person.fullName }}
    </li>
  </ul>
</template>

why.md Raw #

functions called within vue templates will execute every time the component re-renders.