В чем разница между props, data и computed

«В чем разница между props, data и computed» — вопрос из категории Vue, который задают на 10% собеседований Frontend Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Props - это входные параметры, передаваемые от родительского компонента. Они реактивны, но изменять их напрямую нельзя (мутировать нужно через emit).

Data - это внутреннее состояние компонента, объявляется как функция, возвращающая объект. Данные реактивны, их можно изменять напрямую.

Computed - вычисляемые свойства, зависящие от других реактивных данных. Кэшируются и пересчитываются только при изменении зависимостей.

export default {
  props: ['initialCount'], // props
  data() {
    return {
      count: this.initialCount // data
    }
  },
  computed: {
    doubledCount() { // computed
      return this.count * 2
    }
  }
}

Главные отличия:

  • Props - внешний интерфейс, data - внутреннее состояние
  • Computed производны и кэшируются, методы вычисляются каждый раз
  • Изменять можно только data (и computed через их зависимости)