Как не потерять реактивность prop в Vue composable

Передайте getter () => props.query либо ref свойства через toRef. Передача текущей строки копирует значение, а не связь с изменяющимся prop.

Короткий ответ

Что ответить на собеседовании

Передайте getter () => props.query либо ref свойства через toRef. Передача текущей строки копирует значение, а не связь с изменяющимся prop.

Подробный разбор

Ответ с пояснениями

Условие

В Vue 3 вызвано useSearch(props.query). Composable получает строку и наблюдает её, но дальнейшие изменения prop не доходят. Как передать реактивный источник?

Ответ

Передайте getter () => props.query либо ref свойства через toRef. Передача текущей строки копирует значение, а не связь с изменяющимся prop.

Контракт с getter:

function useSearch(getQuery) {
  watch(getQuery, value => {
    // Запустить поиск по новому value.
  }, { immediate: true });
}
useSearch(() => props.query);

Здесь watch импортируется из vue и отслеживает чтение prop. Если composable принимает разные виды источников, нормализуйте их внутри реактивного наблюдения, а не один раз при создании.

Источник: vuejs.org.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее