Category | Reactivity |
---|---|
Export Size | 454 B |
Last Changed | 2 weeks ago |
Reactively pick fields from a reactive object.
import { reactivePick } from '@vueuse/core' const obj = reactive({ x: 0, y: 0, elementX: 0, elementY: 0, }) const picked = reactivePick(obj, 'x', 'elementX') // { x: number, elementX: number }
import { reactivePick } from '@vueuse/core' const source = reactive({ foo: 'foo', bar: 'bar', baz: 'baz', qux: true, }) const state = reactivePick(source, (value, key) => key !== 'bar' && value !== true) // { foo: string, baz: string } source.qux = false // { foo: string, baz: string, qux: boolean }
<script setup> import { reactivePick } from '@vueuse/core' const props = defineProps({ value: { default: 'value', }, color: { type: String, }, font: { type: String, } }) const childProps = reactivePick(props, 'color', 'font') </script> <template> <div> <!-- only passes "color" and "font" props to child --> <ChildComp v-bind="childProps" /> </div> </template>
Instead of doing this
import { reactive } from 'vue' import { useElementBounding } from '@vueuse/core' const { height, width } = useElementBounding() // object of refs const size = reactive({ height, width })
Now we can just have this
import { reactivePick, useElementBounding } from '@vueuse/core' const size = reactivePick(useElementBounding(), 'height', 'width')
export type ReactivePickPredicate<T> = ( value: T[keyof T], key: keyof T ) => boolean export declare function reactivePick<T extends object, K extends keyof T>( obj: T, ...keys: (K | K[])[] ): { [S in K]: UnwrapRef<T[S]> } export declare function reactivePick<T extends object>( obj: T, predicate: ReactivePickPredicate<T> ): { [S in keyof T]?: UnwrapRef<T[S]> }
© 2019-present Anthony Fu
Licensed under the MIT License.
https://vueuse.org/shared/reactivePick/