Загрузка...

Composition API

Composition API в Vue.js представляет собой современный способ организации логики компонентов, обеспечивающий высокую модульность и повторное использование кода. В отличие от Options API, где состояние, методы и вычисляемые свойства разделены на отдельные блоки, Composition API концентрирует их в функции setup(), что упрощает управление сложными компонентами и повышает читаемость кода. Особенно это важно для крупных приложений, где повторное использование логики между компонентами играет ключевую роль.
Используя Composition API, разработчики могут применять ключевые концепции Vue.js: реактивность через ref и reactive, вычисляемые свойства с помощью computed, отслеживание изменений с watch, а также реализовывать алгоритмы и структуры данных с применением принципов ООП. Такой подход делает код более тестируемым, поддерживаемым и масштабируемым, облегчая интеграцию с архитектурой приложений и современными системами.
В данном руководстве вы научитесь управлять реактивным состоянием, создавать повторно используемые функции (Composables), оптимизировать производительность и избегать распространенных ошибок, таких как утечки памяти или некорректная обработка данных. Примеры ориентированы на практическое применение в реальных проектах Vue.js и помогут углубить понимание передовых подходов разработки компонентов с Composition API.

Базовый Пример

text
TEXT Code
import { createApp, ref, computed } from 'vue'

const App = {
setup() {
const counter = ref(0)

const increment = () => {
counter.value++
}

const doubleCounter = computed(() => counter.value * 2)

return {
counter,
increment,
doubleCounter
}

},
template: `     <div>       <h1>Счетчик: {{ counter }}</h1>       <h2>Двойной счетчик: {{ doubleCounter }}</h2>       <button @click="increment">Увеличить</button>     </div>
`
}

createApp(App).mount('#app')

В этом примере функция setup() является центральной точкой Composition API. Переменная counter создается с помощью ref, что делает её реактивной: любое изменение автоматически отображается в шаблоне. Функция increment изменяет состояние, а doubleCounter вычисляет удвоенное значение автоматически при изменении counter. Возврат переменных из setup() позволяет использовать их в шаблоне, обеспечивая модульность и читаемость.
Важно понимать разницу между ref и reactive, а также использование свойства .value для доступа к значениям ref. Данный подход улучшает тестируемость и повторное использование кода, что критично для крупных проектов на Vue.js.

Практический Пример

text
TEXT Code
import { createApp, reactive, watch } from 'vue'

const App = {
setup() {
const state = reactive({
tasks: [],
newTask: ''
})

const addTask = () => {
if (state.newTask.trim() !== '') {
state.tasks.push({ text: state.newTask, completed: false })
state.newTask = ''
}
}

watch(() => state.tasks.length, (newVal, oldVal) => {
console.log(`Количество задач изменилось: ${oldVal} → ${newVal}`)
})

const removeTask = (index) => {
state.tasks.splice(index, 1)
}

return {
state,
addTask,
removeTask
}

},
template: `     <div>       <h1>Список задач</h1>       <input v-model="state.newTask" placeholder="Добавить задачу" />       <button @click="addTask">Добавить</button>       <ul>         <li v-for="(task, index) in state.tasks" :key="index">
{{ task.text }}           <button @click="removeTask(index)">Удалить</button>         </li>       </ul>     </div>
`
}

createApp(App).mount('#app')

В этом примере используется reactive для создания реактивного объекта state. Функции addTask и removeTask изменяют массив задач с проверкой на пустую строку. С помощью watch отслеживается изменение длины массива, что позволяет выполнять побочные эффекты, например логирование в консоль. Этот пример демонстрирует применение принципов ООП, модульность и безопасное управление состоянием. Следует избегать прямого манипулирования DOM и корректно очищать watch для предотвращения утечек памяти, что соответствует лучшим практикам Vue.js.

Лучшие практики включают корректный выбор между ref и reactive, безопасное использование computed и watch, обработку ошибок внутри setup() с помощью try/catch. Для отладки рекомендуется Vue Devtools. Для оптимизации производительности стоит использовать ленивые вычисления и избегать тяжелых операций в watch или computed. Также важно проверять входные данные пользователя для обеспечения безопасности и предотвращения ошибок в сложных приложениях Vue.js.

📊 Справочная Таблица

Vue.js Element/Concept Description Usage Example
ref Создание простой реактивной переменной const count = ref(0)
reactive Создание реактивного объекта или массива const state = reactive({ name: '', age: 0 })
computed Реактивное вычисляемое свойство const double = computed(() => count.value * 2)
watch Отслеживание изменений данных и выполнение побочных эффектов watch(() => state.tasks.length, (newVal) => console.log(newVal))
setup Центральная функция Composition API setup() { const data = ref(0); return { data } }

Composition API позволяет эффективно управлять реактивностью, вычисляемыми свойствами и наблюдением изменений, создавая масштабируемые и повторно используемые компоненты. Следующие шаги включают создание Composables, интеграцию с Pinia для управления состоянием и использование async setup и suspense для сложных сценариев. Документация Vue.js и открытые проекты предоставляют ценные ресурсы для углубленного изучения и практического применения.

🧠 Проверьте Свои Знания

Готов к Началу

Проверьте Свои Знания

Бросьте себе вызов с помощью этой интерактивной викторины и узнайте, насколько хорошо вы понимаете тему

4
Вопросы
🎯
70%
Для Прохождения
♾️
Время
🔄
Попытки

📝 Инструкции

  • Внимательно прочитайте каждый вопрос
  • Выберите лучший ответ на каждый вопрос
  • Вы можете пересдавать тест столько раз, сколько захотите
  • Ваш прогресс будет показан вверху