Узнайте, как написать более чистый и эффективный код VueJS с помощью Watchers

Vue JS был создан Эваном Ю и более чем 234 любителями сообщества. Это очень прогрессивный фреймворк для создания пользовательских интерфейсов. Он состоит из доступной базовой библиотеки, которая фокусируется только на уровне представления, и экосистемы вспомогательных библиотек, которая помогает решать сложные задачи в больших одностраничных приложениях. В этом посте вы познакомитесь с наблюдателями - захватывающая концепция, которая поможет вам развить мастерство в Vue JS.

Совет: делитесь и повторно используйте свои компоненты Vue, чтобы быстрее создавать приложения в команде. Используйте такие инструменты, как Bit (GitHub) для организации, совместного использования и повторного использования компонентов в ваших приложениях. Попробуйте.



Прежде, чем мы начнем

Этот пост подходит для всех уровней фронтенд-разработчиков, использующих Vue JS, поэтому знакомство с концепциями и процессами установки для начинающих не предполагается. Вот несколько предварительных условий, которые у вас уже должны быть, прежде чем вы начнете использовать Vue CLI 3 в рамках этой статьи.

Тебе понадобится:

  • Установлен Node.js 10.x и выше. Вы можете проверить это, запустив node -v в терминале / командной строке.
  • Также установлен Node Package Manager 6.7 или более поздней версии (NPM).
  • Редактор кода: настоятельно рекомендуется Visual Studio Code. (Вот почему)
  • Последняя версия Vue глобально установлена ​​на вашем компьютере.
  • Vue CLI 3.0 установлен на вашем компьютере. Для этого сначала удалите старую версию CLI:
npm uninstall -g vue-cli

затем установите новый:

npm install -g @vue/cli

OR

  • Загрузите стартовый проект Vue здесь


  • Разархивируйте загруженный проект
  • Перейдите в распакованный файл и запустите команду, чтобы поддерживать все зависимости в актуальном состоянии:
npm install

Что такое наблюдатели?

Vue JS был создан как JavaScript-фреймворк, ориентированный на слои представления. Вот почему он основан на шаблоне. Однако в процессе написания кода разработчики могут настолько увлечься простотой использования, что начнут перегружать свои шаблоны Vue излишней логикой. Vue не одобряет этого и советует разбить ваше приложение на компоненты, чтобы улучшить модульную разработку.

Здесь в игру вступают наблюдатели: представьте, что вы можете шпионить за свойством, которое есть в вашем компоненте Vue, а затем иметь возможность реагировать на него, когда Vue замечает изменение в указанном свойстве. Конечно, вы можете настроить обработчик событий и делать все это на обычном JavaScript, но Vue предоставляет еще более простой способ сделать это из коробки, даже не настраивая какие-либо прослушиватели событий.

Почему это важно

В Vue JS наблюдатели создают платформу для разработчиков, чтобы отслеживать изменения в свойствах представления. Это также может служить альтернативой вычисляемым свойствам во Vue JS. Еще одна важная вещь заключается в том, что с помощью наблюдателей вы можете имитировать поведение созданного крючка жизненного цикла.

Синтаксис наблюдателя

<script>
export default {
  watch: {
  }
}
</script>

Демо: что вы будете строить

Чтобы продемонстрировать Vue JS watcher, вы создадите простую игру на счет денег. Если вы следили за этим постом с самого начала, вы, должно быть, скачали стартовый проект Vue, разархивировали его и открыли в VS Code.

Перейдите к основному файлу app.vue и удалите тег изображения, а затем откройте файл test.vue внутри папки компонентов и скопируйте этот блок кода ниже внутри него:

<template>
  <div>
    <h2>The money Game</h2>
    <p>Jack and Jill both won 2 all-access tickets to the Amusement Park </p>
       <p>They both also have $0 each in their pockets and want to play the MG</p>
    <button v-on:click="addJack()">Add $1 to Jack</button>
    <button v-on:click="addJill()">Add $1 to Jill</button>
    <p>Jack: ${{jack}}</p> <p>Jill: ${{jill}}</p>
  </div>
</template>
<script>
export default {
  name: 'Test',
  data() {
    return {
     jack: 0,
     jill: 0
    }
},
  methods: {
    addJack: function(){
      this.jack++;
    },
    addJill: function(){
      this.jill++;
    }
  },
  watch:{
    jack: function(){
      console.log('jack changed value');
    },
    jill: function(){
      console.log('jill changed value');
    }
  }
  
}
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
h3 {
  margin: 40px 0 0;
}
ul {
  list-style-type: none;
  padding: 0;
}
li {
  display: inline-block;
  margin: 0 10px;
}
a {
  color: #42b983;
}
button {
    background-color: rgb(58, 128, 194); 
    border: none;
    color: white;
    padding: 15px 32px;
    margin: 5px;
    text-align: center;
    text-decoration: none;
    display: inline-block;
    font-size: 18px;
  }
</style>

Внутри блока кода, выделенного жирным шрифтом, вы можете увидеть, как можно установить наблюдателей. Здесь свойства jack и jill настроены так, чтобы за ними шпионили. Наблюдатели позволяют вам определять логику внутри функций для этих шпионских операций, позволяя им принимать два аргумента: oldValue и newValue. Чтобы проверить эти аргументы, измените блок кода просмотра в файле test.vue на следующий:

watch:{
    jack: function(newValue, oldValue){
      console.log('jack had an old balance of $'+ oldValue);
    },
    jill: function(newValue, oldValue){
      console.log('jill had an old balance of $'+ oldValue);
    }
  }

Вы можете повторно запустить свое приложение с помощью команды сервера разработки vue:

npm run serve

Абстрагирование от метода жизненного цикла

Самая последняя функция наблюдателей - это способность абстрагироваться от созданного метода жизненного цикла во Vue JS. Поэтому, если у вас есть какие-либо реквизиты, которые вы хотите загрузить, или функция, которую вы хотите запустить при инициализации экземпляра Vue, вы обычно будете использовать созданный обработчик жизненного цикла для определения этой логики или поведения. С наблюдателями Vue вы тоже можете делать именно это, на этот раз без необходимости включать ловушку жизненного цикла, что мне интересно.

Скажем, в нашем примере, Джек и Джилл уже получили по 1 доллару каждый, прежде чем вы сможете начать игру на деньги, это может быть хорошим вариантом использования для вызова функции при инициализации. Измените раздел сценария файла test.vue на блок кода ниже:

<script>
export default {
  name: 'Test',
  data() {
    return {
     forceJack: '',
     forceJill: '',
     jack: 0,
     jill: 0
    }
},
  methods: {
    addJack: function(){
      this.jack++;
    },
    addJill: function(){
      this.jill++;
    }
  }
  ,
  watch:{
    jack: function(newValue, oldValue){
      console.log('jack had an old balance of $'+ oldValue);
    },
    jill: function(newValue, oldValue){
      console.log('jill had an old balance of $'+ oldValue);
    },
    forceJack: {
      handler: 'addJack', 
      immediate: true
    },
    forceJill: {
      handler: 'addJill', 
      immediate: true
    }
  }
  
}
</script>

Чтобы настроить абстракцию, вам нужно будет сделать наблюдателя объектом, а затем предоставить объекту два свойства:

  • Обработчик: это имя метода, который вы хотите запустить при инициализации.
  • Немедленно: это свойство, которое заставляет крючок имитировать созданный крючок жизненного цикла.

Заключение

Вы познакомились с концепцией шпионажа за собственностью в Vue JS, называемой наблюдателями. Вам также показали, как можно настроить наблюдатели и как сделать их абстракциями созданного метода жизненного цикла. Удачного взлома!

Учить больше