К списку уроков

Урок 2. Первый компонент. Классические хуки.

Онлайн и в K-212, 30 октября (четверг), 15:15

Видео представляет собой подробный интерактивный урок по программированию на Vue.js, ориентированный на начинающих и продолжающих разработчиков, желающих глубже понять работу с компонентами, реактивностью, хуками жизненного цикла и взаимодействием с сервером. Основная цель — показать практическое применение продвинутых возможностей Vue 3, включая работу с реактивными объектами, вычисляемыми свойствами, watcher, передачей пропсов в компоненты, а также организацию проекта с использованием компонентов и современных практик. Зритель получит ценные знания по архитектуре Vue-приложений, умению создавать переиспользуемые компоненты, управлять состоянием и жизненным циклом, а также подружится с основами асинхронных запросов и управления селекторами.

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

Хронологическая сводка

- 00:00 - 05:00: Организация курса и первый компонент с хуками Reactivity

Объявление итогового проекта — создание собственного мессенджера на Vue.js. Обзор и объяснение ключевых хуков жизненного цикла: computed и watch. Разъяснены различия и случаи использования этих хуков.

- 05:00 - 10:00: Работа с reactive и ref, создание проекта и настройка окружения

Объяснение разницы между reactive и ref, особенности работы с примитивами и объектами. Запуск проекта, использование git fork, создание репозитория, подготовка к дальнейшей работе.

- 10:00 - 20:00: Практика с computed свойствами и динамическим изменением состояния

Разработка интерфейса с двумя счетчиками, демонстрация биндинга input с реактивными данными, исправление ошибок типов данных, реализация динамического изменения размера текста с computed.

- 20:00 - 30:00: Введение в компоненты Vue и передача пропсов

Объяснение зачем нужны компоненты, их преимущества — повторное использование, изоляция логики и стилей. Три способа определения и передачи пропсов в компонент с использованием TypeScript. Демонстрация примера с карточками продуктов и разбор тонкостей динамической передачи данных.

- 30:00 - 40:00: Создание минимального приложения с чатом и использование Vue-циклa v-for

Реализация списка чатов через компонент ChatPreview, передача и типизация пропсов, вёрстка с CSS Flexbox, настройка scoped стилей для изоляции компонента. Введение переменной chats с массивом объектов. Демонстрация динамического рендеринга с использованием v-for.

- 40:00 - 50:00: Управление состоянием выбранного чата и применение watcher

Введение состояния selectedChat для отражения выбранного чата. Демонстрация добавления слушателя клика, написание watcher для отслеживания изменений пропсов и объяснение функции toRefs для работы с реактивным объектом. Добавление CSS класса для визуального выделения выбранного элемента.

- 50:00 - 01:05:00: Работа с жизненным циклом компонентов и асинхронными запросами

Обзор хуков жизненного цикла onMounted, onUnmounted, onUpdated, их применения. Пример использования onMounted для запроса данных с API (fake API пользователей). Разбор ошибок и особенностей работы с асинхронным fetch. Маппинг данных API под структуру компоненты чата.

- 01:05:00 - 01:16:00: Оптимизация отображения и стилизация элементов списка чатов

Решение задачи ограничения текста на одну строку с помощью CSS ellipsis и фиксированной ширины, улучшение UX. Введение активности выбора чата через реактивную переменную. Добавление стилей для выбранного состояния, курсора pointer и плавного взаимодействия.

- 01:16:00 - Конец: Планы на следующий урок, общение и организация работы

Обсуждение будущей интеграции backend, генерации типов TypeScript с API, дальнейших домашних заданий по оформлению селектора чатов и компонентов. Рекомендации по работе с компонентами сообщений, обсуждение примеров и советов по проектированию архитектуры. Неофициальное завершение с ответами на вопросы и пожеланиями.

Ключевые моменты

- 💡 Различие computed и watch в Vue: computed возвращает вычисляемое значение и является ленивым, watch применяется для реактивных эффектов (например, запросы к backend при изменениях).

- 🔥 React vs reactive: ref подходит для примитивов и объектов с доступом через .value, reactive — для глубоких реактивных объектов без необходимости .value.

- ⚙️ Передача пропсов и использование defineProps + withDefaults: три варианта передачи и типизация пропсов, дефолтные значения для необязательных параметров.

- 🎯 Лучшие практики компонентного подхода: один компонент — одна логическая задача, изоляция стилей через scoped, избежание god components.

- 🚀 Жизненный цикл компонента в Vue 3: onMounted для инициализации данных, onUnmounted для очистки ресурсов, onUpdated для реагирования на обновления.

- 📡 Асинхронные запросы и маппинг данных: использование fetch в хуке onMounted, mаппинг данных API под нужную структуру компонента для рендеринга списка.

- 👁️ UI улучшения: CSS ellipsis для текстовых ограничений, выбранный статус с визуальными эффектами и курсором pointer.

- 🛠️ Работа с reactivity API (toRefs, watch, ref): преобразование реактивных объектов в отдельные рифы и слежение за изменениями с помощью watcher.

Часто задаваемые вопросы (FAQ)

1. В чем разница между computed и watch?

computed — это вычисляемое свойство, которое кэшируется и пересчитывается при изменении реактивных зависимостей. watch — наблюдатель за реактивными данными для вызова побочных эффектов (например, запросов).

2. Когда использовать ref, а когда reactive?

ref используют для хранения примитивных значений и объектов с доступом через .value. reactive — для глубоких реактивных объектов, когда не хочется работать с .value.

3. Как правильно передавать пропсы в Vue и где задавать дефолтные значения?

Можно использовать defineProps для описания пропсов, а withDefaults — чтобы задать дефолтные значения, которые применяются, если пропс не передан.

4. Что такое жизненный цикл компонента и зачем он нужен?

Хуки жизненного цикла позволяют выполнять логику при появлении, обновлении или удалении компонента из DOM, например, для загрузки данных или очистки ресурсов.

5. Как сделать переиспользуемые компоненты и избежать god components?

Разбивайте UI на логически завершённые части, старайтесь, чтобы один компонент решал одну задачу, используйте scoped стили и передавайте пропсы для настройки.

Заключение

Видео эффективно раскрывает продвинутые темы в разработке на Vue.js, с акцентом на практические кейсы и понимание ключевых механизмов реактивности, компонентной архитектуры и жизненного цикла. Оно демонстрирует, как создавать реальные пользовательские интерфейсы, строить переиспользуемые компоненты и управлять состоянием с помощью современных Vue API. Основной вывод — успех в Vue-разработке достигается через глубокое понимание реактивности и ответственный подход к архитектуре: разделение на компоненты, корректная передача данных и учет жизненного цикла. Рекомендуется применять полученные знания в небольших проектах для закрепления, а также постепенно усложнять архитектуру по мере роста приложения. Следующий шаг — интеграция backend и освоение TypeScript, чтобы повысить надежность и масштабируемость кода.

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

Ссылки на материаллы.

Презентация тык.

Computed - https://ru.vuejs.org/api/reactivity-core.html#computed

Watch - https://ru.vuejs.org/api/reactivity-core.html#watch

Компоненты - https://ru.vuejs.org/guide/essentials/component-basics.html

Хуки - https://ru.vuejs.org/api/composition-api-lifecycle.html

Задания