--- category: Reactivity related: syncRef --- # syncRefs Keep target refs in sync with a source ref ## Usage ```ts import { syncRefs } from '@vueuse/core'; import { shallowRef } from 'vue'; const source = shallowRef('hello'); const target = shallowRef('target'); const stop = syncRefs(source, target); console.log(target.value); // hello source.value = 'foo'; console.log(target.value); // foo ``` ### Sync with multiple targets You can also pass an array of refs to sync. ```ts import { syncRefs } from '@vueuse/core'; import { shallowRef } from 'vue'; const source = shallowRef('hello'); const target1 = shallowRef('target1'); const target2 = shallowRef('target2'); const stop = syncRefs(source, [target1, target2]); console.log(target1.value); // hello console.log(target2.value); // hello source.value = 'foo'; console.log(target1.value); // foo console.log(target2.value); // foo ``` ## Watch options The options for `syncRefs` are similar to `watch`'s `WatchOptions` but with different default values. ```ts export interface SyncRefOptions { /** * Timing for syncing, same as watch's flush option * * @default 'sync' */ flush?: WatchOptionFlush; /** * Watch deeply * * @default false */ deep?: boolean; /** * Sync values immediately * * @default true */ immediate?: boolean; } ``` When setting `{ flush: 'pre' }`, the target reference will be updated at [the end of the current "tick"](https://vuejs.org/guide/essentials/watchers.html#callback-flush-timing) before rendering starts. ```ts import { syncRefs } from '@vueuse/core'; import { nextTick, shallowRef } from 'vue'; const source = shallowRef('hello'); const target = shallowRef('target'); syncRefs(source, target, { flush: 'pre' }); console.log(target.value); // hello source.value = 'foo'; console.log(target.value); // hello <- still unchanged, because of flush 'pre' await nextTick(); console.log(target.value); // foo <- changed! ``` ## Type Declarations ```ts export interface SyncRefsOptions extends ConfigurableFlushSync { /** * Watch deeply * * @default false */ deep?: boolean; /** * Sync values immediately * * @default true */ immediate?: boolean; } /** * Keep target ref(s) in sync with the source ref * * @param source source ref * @param targets */ export declare function syncRefs( source: WatchSource, targets: Ref | Ref[], options?: SyncRefsOptions, ): WatchHandle; ```