An UI-component library based on Vue3
<JsonSchemaForm
schema={schema}
value={value}
onChange={handleOnChange}
locale={locale}
contextRef={someRef}
uiSchema={uiSchema}
/>
json schema 对象,用来定义数据,同事也是定义表单的依据
表单的数据结果,你可以从外部改变这个value
,在表单被编辑的时候,会通过onChange
透出value
。
需要注意的一点,因为vue
使用的是可变数据,如果每次数据变化我们都去改变value
的对象地址,那么会导致整个表单都需要重新渲染,从而造成大量的性能浪费。
从实践中来看,我们传入的对象,在内部修改其field
的值基本不会有什么副作用,所以我们会使用这种方式来进行实现。也就是说,如果value
是一个对象,那么从JsonSchemaForm
内部修改的值,并不会改变value
对象本身,我们仍然会触发onChange
,因为可能在表单变化之后,用户需要进行进一步的操作。
在表单值发生变化的时候会触发该回调函数,并把新的值返回
语言,使用ajv-i18n
指定错误信息使用的语言
你需要传入一个vue3
的Ref
对象,我们会在这个对象上挂载doValidate
方法,你可以通过
const yourRef = ref({});
onMounted(() => {
yourRef.value.doValidate();
});
<JsonSchemaForm contextRef={yourRef} />;
这样来主动对表单进行校验。
对表单的展示进行一些定制,其类型如下:
export interface VueJsonSchemaConfig {
title?: string;
description?: string;
component?: string;
additionProps?: {
[key: string]: any;
};
withFormItem?: boolean;
widget?: "checkbox" | "textarea" | "select" | "radio" | "range" | string;
items?: UISchema | UISchema[];
}
export interface UISchema extends VueJsonSchemaConfig {
properties?: {
[property: string]: UISchema;
};
}