Files
moeka-project/.agents/skills/vueuse-functions/references/toRef.md
T

75 lines
2.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
category: Reactivity
---
# toRef
Normalize value/ref/getter to `ref` or `computed`.
## Usage
```ts
import { toRef } from '@vueuse/core'
const foo = ref('hi')
const a = toRef(0) // Ref<number>
const b = toRef(foo) // Ref<string>
const c = toRef(() => 'hi') // ComputedRef<string>
```
## Differences from Vue's `toRef`
VueUse's `toRef` is not the same as Vues `toRef` from the `vue` package.
### VueUse `toRef`
- Accepts **value**, **ref**, or **getter**
- Returns:
- a **ref** for primitive values
- a **ref** for existing refs
- a **computed** for getter functions
- Does **not** accept `object + key`
- Getters always produce readonly computed values
### Vue `toRef`
- Accepts only:
- a **reactive object + property key**, or
- an existing **ref**
- Produces a **writable ref** linked to the underlying reactive object
- Does **not** accept primitive values
- Does **not** accept getter functions
### Summary
| Behavior | VueUse `toRef` | Vue `toRef` |
| ------------------------ | ------------------------- | ----------------------- |
| Accepts primitive values | ✔️ | ❌ |
| Accepts getter | ✔️ (computed) | ❌ |
| Accepts existing ref | ✔️ | ✔️ |
| Accepts object + key | ❌ | ✔️ |
| Writable | ✔️ (except getter) | ✔️ |
| Purpose | Normalize to ref/computed | Bind to reactive object |
## Type Declarations
```ts
/**
* Normalize value/ref/getter to `ref` or `computed`.
*/
export declare function toRef<T>(r: () => T): Readonly<Ref<T>>
export declare function toRef<T>(r: ComputedRef<T>): ComputedRef<T>
export declare function toRef<T>(r: MaybeRefOrGetter<T>): Ref<T>
export declare function toRef<T>(r: T): Ref<T>
export declare function toRef<T extends object, K extends keyof T>(
object: T,
key: K,
): ToRef<T[K]>
export declare function toRef<T extends object, K extends keyof T>(
object: T,
key: K,
defaultValue: T[K],
): ToRef<Exclude<T[K], undefined>>
```