2.4 KiB
2.4 KiB
category, related
| category | related |
|---|---|
| Reactivity | syncRef |
syncRefs
Keep target refs in sync with a source ref
Usage
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.
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.
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" before rendering starts.
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
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<T>(
source: WatchSource<T>,
targets: Ref<T> | Ref<T>[],
options?: SyncRefsOptions,
): WatchHandle;