Appearance
useCloned
创建源数据的响应式克隆,支持自定义克隆函数和手动/自动同步。
函数签名
ts
function useCloned<T>(
source: MaybeRefOrGetter<T>,
options?: UseClonedOptions,
): {
cloned: Ref<T>
sync: () => void
}基础用法
参数
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| source | 源数据(支持 ref / getter / 原始值) | MaybeRefOrGetter<T> | — |
| options | 配置项 | UseClonedOptions | {} |
UseClonedOptions
继承 WatchOptions,额外支持:
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| clone | 自定义克隆函数 | (source: T) => T | JSON.parse(JSON.stringify()) |
| manual | 是否手动同步(true 时不自动 watch 源变化) | boolean | false |
| deep | 深度监听 | boolean | true |
| immediate | 立即执行 | boolean | true |
返回值
| 属性 | 说明 | 类型 |
|---|---|---|
| cloned | 克隆后的响应式数据 | Ref<T> |
| sync | 手动同步函数,调用后将源数据克隆到 cloned | () => void |
代码示例
ts
import { ref } from 'vue'
import { useCloned } from 'ljf-hooks'
const source = ref({ name: '张三', age: 20 })
const { cloned, sync } = useCloned(source)
// 自动同步:源变化时 cloned 自动更新
source.value.name = '李四'
// cloned.value.name === '李四'
// 手动模式
const { cloned: manualCloned, sync: manualSync } = useCloned(source, { manual: true })
source.value.name = '王五'
// manualCloned 不会自动更新
manualSync() // 手动同步