Reactivity API: Утилиты
Вакансии vuejobs.com
isRef()
Проверяет, является ли значение объектом ref.
Тип:
tsfunction isRef<T>(r: Ref<T> | unknown): r is Ref<T>Обратите внимание, что возвращаемый тип является предикатом типа, это значит что
isRefможет быть использован в качестве type guard'a:tslet foo: unknown if (isRef(foo)) { // тип foo уточняется до Ref<unknown> foo.value }
unref()
Возвращает внутреннее значение, если аргумент является ref-ссылкой, в противном случае возвращает сам аргумент. Это вспомогательная функция для val = isRef(val) ? val.value : val.
Тип:
tsfunction unref<T>(ref: T | Ref<T>): TПример:
tsfunction useFoo(x: number | Ref<number>) { const unwrapped = unref(x) // unwrapped теперь гарантированно будет иметь числовой тип }
toRef()
Может использоваться для создания ссылки на свойство исходного реактивного объекта. Созданная ref-ссылка синхронизируется с входными параметрами источника: изменение входных параметров источника приведет к обновлению ссылки, и наоборот.
Тип:
tsfunction toRef<T extends object, K extends keyof T>( object: T, key: K, defaultValue?: T[K] ): ToRef<T[K]> type ToRef<T> = T extends Ref ? T : Ref<T>Пример:
jsconst state = reactive({ foo: 1, bar: 2 }) const fooRef = toRef(state, 'foo') // мутация ref обновляет оригинал fooRef.value++ console.log(state.foo) // 2 // мутация оригинала также обновляет ref state.foo++ console.log(fooRef.value) // 3Обратите внимание, что это отличается от:
jsconst fooRef = ref(state.foo)Приведенная выше ref-ссылка не синхронизируется с
state.foo, потому чтоref()получает значение обыкновенного числа.Функция
toRef()полезна, когда вы хотите передать ссылку входного параметра в функцию композиции:vue<script setup> import { toRef } from 'vue' const props = defineProps(/* ... */) // преобразуем `props.foo` в ссылку, и затем передаем в функцию композиции useSomeFeature(toRef(props, 'foo')) </script>Когда
toRefиспользуется с входными параметрами компонента, обычные ограничения на изменение входных параметров остаются в силе. Попытка присвоить новое значение входным параметрам эквивалентна попытке изменить входные параметры напрямую, что в свою очередь - не допустимо. В этом случае вы можете рассмотреть возможность использованияcomputedсgetиsetвместо этого. Для получения дополнительной информации смотрите руководство по использованиюv-modelв компонентах.toRef()будет возвращать подходящее свойство, даже если исходное свойство не существует. Это позволяет работать с необязательными свойствами, которые не были бы полученыtoRefs.
toRefs()
Преобразует реактивный объект в обычный объект, где каждое свойство результирующего объекта является ref-ссылкой, указывающей на соответствующее свойство исходного объекта. Каждая отдельная ref-ссылка создается с помощью toRef().
Тип:
tsfunction toRefs<T extends object>( object: T ): { [K in keyof T]: ToRef<T[K]> } type ToRef = T extends Ref ? T : Ref<T>Пример:
jsconst state = reactive({ foo: 1, bar: 2 }) const stateAsRefs = toRefs(state) /* Type of stateAsRefs: { foo: Ref<number>, bar: Ref<number> } */ // ref-ссылка и исходное свойство "связаны" state.foo++ console.log(stateAsRefs.foo.value) // 2 stateAsRefs.foo.value++ console.log(state.foo) // 3toRefsполезно при возврате реактивного объекта из функции композиции, чтобы потребляющий компонент мог деструктурировать/распространить возвращаемый объект без потери реактивности:jsfunction useFeatureX() { const state = reactive({ foo: 1, bar: 2 }) // логика, работающая с состоянием // конвертация в ref-ссылку при возврате return toRefs(state) } // может быть деструктурировано без потери реактивности const { foo, bar } = useFeatureX()toRefsбудет генерировать ссылки только для тех свойств, которые являются перечислимыми для исходного объекта на момент вызова. Чтобы создать ссылку для свойства, которое может еще не существовать, используйтеtoRef.
isProxy()
Проверяет, является ли объект прокси, созданным с помощью reactive(), readonly(), shallowReactive() или shallowReadonly().
Тип:
tsfunction isProxy(value: unknown): boolean
isReactive()
Проверяет, является ли объект прокси, созданным reactive() или shallowReactive().
Тип:
tsfunction isReactive(value: unknown): boolean
isReadonly()
Проверяет, является ли переданное значение объектом readonly. Свойства объекта readonly могут изменяться, но они не могут быть присвоены непосредственно через переданный объект.
Прокси, созданные readonly() и shallowReadonly(), считаются readonly, как и ref-ссылка computed() без функции set.
Тип:
tsfunction isReadonly(value: unknown): boolean