Сазнајте више о Вуе.јс Ватцхерс-у да бисте побољшали развој веб апликација

Кључни закључци

  • JavaScript фрејмворци, попут Vue.js, пружају функционалности попут компоненти, управљања стањем и рутирања, што значајно поједностављује развој веб апликација.
  • У Vue-у, „watchers“ су функције које надгледају промене у реактивним својствима и омогућавају реаговање на те промене.
  • У поређењу са „computed properties“, „computed properties“ су обично концизнији и лакши за читање, што може довести до бољих перформанси и лакшег отклањања грешака.

JavaScript фрејмворци су постали неизоставан део савременог веб развоја. Њихова популарност лежи у чињеници да нуде функционалности попут архитектуре компоненти, управљања стањем апликације и навигације. Ово помаже у смањењу сложености и времена потребног за изградњу веб апликација од почетка.

Vue.js, као један од водећих фрејмворка, нуди мноштво алата за убрзавање процеса развоја. Функција посматрања (watch) омогућава праћење промена вредности променљивих и израза током извршавања кода.

Шта су „watchers“ у Vue.js?

„Watchers“ у Vue.js-у су функције које прате промене у реактивним својствима и реагују на те промене. Оне вам омогућавају да реагујете на догађаје и измене података у вашој апликацији.

Да бисте користили „watcher“, потребно је да увезете функцију `watch` из Vue пакета:

<script setup>
import { watch } from 'vue';
</script>

Сада можете користити функцију `watch` за имплементацију посматрача у својој Vue компоненти. Ево једноставног примера:

<template>
  <div>
    <p>{{ user }}</p>
    <button @click="changeName">Промени име</button>
  </div>
</template>
<script setup>
import { ref, watch } from 'vue';
const user = ref('Chinedu');
const changeName = () => {
    user.value="Victor"; // Промена имена корисника
};
watch(user, (newUser, oldUser) => {
  alert(`Корисничко име је промењено са "${oldUser}" на "${newUser}"`);
});
</script>

Ова компонента користи функцију `watch` за праћење промене корисничког имена. У HTML структури компоненте, приказана је вредност променљиве `user`, а дугме `changeName` је повезано са функцијом за промену имена. Када се вредност променљиве `user` промени, Vue покреће функцију која приказује поруку са упозорењем о промени имена.

Поређење „watchers“ са „computed properties“

Важно је разумети разлику између „watchers“ и „computed properties“. Иако се оба користе за постизање реактивности у Vue.js, имају различите намене и треба их користити у различитим ситуацијама.

На пример, можемо израчунати збир година оца и сина користећи „watchers“ на следећи начин:

<template>
  <input type="text" placeholder="Године оца" v-model="father">
  <input type="text" placeholder="Године сина" v-model="son">
  <p>Укупан број година: {{ total }}</p>
</template>
<script setup>
import { ref, watch } from 'vue';
const father = ref();
const son = ref();
const total = ref();
watch(son, (newAge, oldAge) => {
  total.value = Number(father.value) + Number(newAge)
})
watch(father, (newAge, oldAge) => {
  total.value = Number(newAge) + Number(son.value)
})
</script>

Ова компонента користи „watchers“ за израчунавање збира година оца и сина. Користи реактивну променљиву `total`, која се ажурира при свакој промени година оца или сина.
Код надгледа старост сина и оца, и када се било која од њих промени, израчунава се укупан збир и чува у променљивој `total`.

Исти сценарио, али са коришћењем „computed properties“:

<template>
  <input type="text" placeholder="Године оца" v-model="father">
  <input type="text" placeholder="Године сина" v-model="son">
  <p>Укупан број година: {{ total }}</p>
</template>
<script setup>
import { ref , computed } from 'vue';
const father = ref();
const son = ref();
const total = computed(() => {
  return Number(father.value) + Number(son.value);
});
</script>

Овај код је концизнији и лакши за читање. „Computed property“ `total` израчунава збир година оца и сина. У HTML-у се вредност `total` приказује користећи интерполацију.

Иако је могуће израчунати збир година помоћу „watchers“, у овом случају је боље користити „computed properties“. Употреба „watchers“ у овом случају може довести до споријег учитавања и отежаног отклањања грешака, јер је код сложенији.

Не треба користити „watchers“ као замену за „computed properties“. „Watchers“ користите за надгледање промена података и реаговање на њих, док „computed properties“ користите када желите да добијете нове податке на основу постојећих реактивних података.

Опција `immediate` у „watcher“ конфигурацији омогућава да се функција покрене одмах након што се компонента монтира.

Пример компоненте која користи „watcher“ са опцијом `immediate`:

<script setup>
import { ref, watch } from 'vue';
const count = ref(10);
watch(
    count,
    (newCount, oldCount) => {
        console.log(`Број се променио са ${oldCount} на ${newCount}`);
    },
    { immediate: true }
);
</script>

У овом примеру, „watcher“ ће извршити функцију одмах након иницијализације компоненте и приказати поруку у конзоли. Ово показује да је почетна вредност била недефинисана пре него што је Vue поставио вредност 10 у `count` ref.

Опција `immediate` је корисна када је потребно извршити неку почетну акцију на основу вредности посматраног својства, на пример, при преузимању података из API-ja.

Опција `deep` у Vue „watchers“

Опција `deep` у Vue „watchers“ омогућава дубинско посматрање промена унутар угнежђених објеката или низова. Када је постављена на `true`, „watcher“ може да детектује промене унутар угнежђених својстава.

Пример компоненте са `deep` опцијом:

<script setup>
import { ref, watch } from 'vue';
const data = ref({ length: 42 });
watch(
    data,
    (newData, oldData) => {
      console.log(`Подаци су промењени`);
    },
    { deep: true }
);
// Ово ће покренути "watcher" јер је промена дубока
data.value.length = 43;
</script>

У овом коду, `data` је иницијализован као ref са објектом који садржи својство `length`. Опција `deep` је постављена на `true`, а промена вредности `data.value.length` ће покренути „watcher“ и исписати поруку у конзоли.

Без `deep: true`, „watcher“ не би детектовао промене у објекту. Vue аутоматски прати промене дубоких угнежђења, када се користи `reactive` променљива:

<script setup>
import { reactive, watch } from 'vue';
const data = reactive({ length: 42 });
watch(
  data,
    (newData, oldData) => {
      console.log(`Подаци су промењени`);
    }
);
// Ово ће покренути "watcher" јер мења реактивни објекат
data.length = 43;
</script>

У горњем коду, „watcher“ ће пријавити промену у конзоли јер је променљива `data` дефинисана као реактивни објекат.

Направите боље апликације са Vue „watchers“

Vue „watchers“ вам могу помоћи да постигнете фину контролу над реактивношћу у вашим апликацијама. Они омогућавају праћење промена у својствима података и покретање прилагођене логике као одговор на те промене.

Разумевање када треба користити „watchers“, њихове разлике у односу на „computed properties“, и опција попут `immediate` и `deep`, може значајно побољшати вашу способност креирања Vue апликација са високим степеном реактивности.