跳到主要内容

useVModel

分类
导出大小
486 B
上次更改
3 个月前
相关

v-model 绑定的简写,props + emit -> ref

我们鼓励你使用 Vue 的 defineModel 而非此可组合函数,然而在某些特殊情况下,例如使用 TSXdefineModel 不支持的 deep: true 选项时,此可组合函数会很有用。

用法

ts
import { 
useVModel
} from '@vueuse/core'
const
props
=
defineProps
<{
modelValue
: string
}>() const
emit
=
defineEmits
(['update:modelValue'])
const
data
=
useVModel
(
props
, 'modelValue',
emit
)
js
import { useVModel } from '@vueuse/core'
const props = defineProps()
const emit = defineEmits(['update:modelValue'])
const data = useVModel(props, 'modelValue', emit)

选项式 API

ts
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')
}, }

类型声明

显示类型声明
ts
export interface 
UseVModelOptions
<
T
,
Passive
extends boolean = false> {
/** * When passive is set to `true`, it will use `watch` to sync with props and ref. * Instead of relying on the `v-model` or `.sync` to work. * * @default false */
passive
?:
Passive
/** * When eventName is set, it's value will be used to overwrite the emit event name. * * @default undefined */
eventName
?: string
/** * Attempting to check for changes of properties in a deeply nested object or array. * Apply only when `passive` option is set to `true` * * @default false */
deep
?: boolean
/** * Defining default value for return ref when no value is passed. * * @default undefined */
defaultValue
?:
T
/** * Clone the props. * Accepts a custom clone function. * When setting to `true`, it will use `JSON.parse(JSON.stringify(value))` to clone. * * @default false */
clone
?: boolean |
CloneFn
<
T
>
/** * The hook before triggering the emit event can be used for form validation. * if false is returned, the emit event will not be triggered. * * @default undefined */
shouldEmit
?: (
v
:
T
) => boolean
} /** * Shorthand for v-model binding, props + emit -> ref * * @see https://vueuse.org.cn/useVModel * @param props * @param key (default 'modelValue') * @param emit * @param options * * @__NO_SIDE_EFFECTS__ */ 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
SerKo
Anthony Fu
webfansplz
Shinigami
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

更新日志

v13.6.0
d32f8 - refactor: 为所有纯函数添加 @__NO_SIDE_EFFECTS__ 注释 (#4907)
0a9ed - feat!: 放弃对 Vue 2 的支持,优化打包并清理 (#4349)
v10.4.0
48f4c - 修复:clone 设置为 true 触发无限循环 (#3097)
v10.2.0
7d788 - 特性:改进类型重载 (#3055)

根据 MIT 许可证发布。