Skip to content

useVModel

类别
导出体积
533 B
上次更改
2 minutes ago
相关

简化 v-model 绑定的简写方式,将 props + emit 转换为 ref

用法

js
import { useVModel } from '@vueuse/core'

export default {
  setup(props, { emit }) {
    const data = useVModel(props, 'data', emit)

    console.log(data.value) // props.data
    data.value = 'foo' // emit('update:data', 'foo')
  },
}

<script setup>

vue
<script lang="ts" setup>
import { useVModel } from '@vueuse/core'

const props = defineProps<{
  modelValue: string
}>()
const emit = defineEmits(['update:modelValue'])

const data = useVModel(props, 'modelValue', emit)
</script>

类型声明

显示类型声明
typescript
export interface UseVModelOptions<T, Passive extends boolean = false> {
  /**
   * 当 passive 设置为 `true` 时,它将使用 `watch` 来与 props 和 ref 同步。
   * 而不是依赖于 `v-model` 或 `.sync`。
   *
   * @default false
   */
  passive?: Passive
  /**
   * 当设置了 eventName 时,它的值将用于覆盖 emit 事件的名称。
   *
   * @default undefined
   */
  eventName?: string
  /**
   * 尝试检查嵌套对象或数组中属性的更改。
   * 仅在将 `passive` 选项设置为 `true` 时应用
   *
   * @default false
   */
  deep?: boolean
  /**
   * 在未传递值时定义返回 ref 的默认值。
   *
   * @default undefined
   */
  defaultValue?: T
  /**
   * 克隆 props。
   * 接受一个自定义克隆函数。
   * 当设置为 `true` 时,它将使用 `JSON.parse(JSON.stringify(value))` 进行克隆。
   *
   * @default false
   */
  clone?: boolean | CloneFn<T>
  /**
   * 在触发 emit 事件之前的钩子,可用于表单验证。
   * 如果返回 false,则不会触发 emit 事件。
   *
   * @default undefined
   */
  shouldEmit?: (v: T) => boolean
}
export declare function useVModel<
  P extends object,
  K extends keyof P,
  Name extends string,
>(
  props: P,
  key?: K,
  emit?: (name: Name, ...args: any[]) => void,
  options?: UseVModelOptions<P[K], false>,
): WritableComputedRef<P[K]>
export declare function useVModel<
  P extends object,
  K extends keyof P,
  Name extends string,
>(
  props: P,
  key?: K,
  emit?: (name: Name, ...args: any[]) => void,
  options?: UseVModelOptions<P[K], true>,
): Ref<UnwrapRef<P[K]>>

源码

源码文档

贡献者

Anthony Fu
Jelf
一纸忘忧
webfansplz
Anthony Fu
motian
objectisundefined
Alex Liu
白雾三语
Eduardo Wesley
Roman Meshcheryakov
久染
chaii3
Tmk
wheat
sondh0127
Zenthae
Eduardo San Martin Morote
lstoeferle
Alex Kozack
Homyee King
Prabu Rangki
Leonidas Arvanitis
yangger

更新日志

v10.4.0 on 8/25/2023
48f4c - fix: clone set to true triggered infinite loop (#3097)
v10.2.0 on 6/16/2023
7d788 - feat: improve types overload (#3055)
v10.0.0-beta.5 on 4/13/2023
cb644 - refactor!: remove isFunction and isString utils
v10.0.0-beta.1 on 3/23/2023
f8a53 - feat: add shouldEmit hook (#2836)
v9.2.0 on 9/5/2022
369e1 - feat: support clone option (#2022)