@alifd/field
Version:
Fields can be used to manage data when it comes to form data manipulation and validation. After being associated with a component, the form data can be automatically written back, read, and verified.
315 lines (267 loc) • 7.31 kB
TypeScript
export type FieldOption = {
/**
* 所有组件的change都会到达这里[setValue不会触发该函数]
*/
onChange?: (name: string, value: any) => void;
/**
* 是否翻译init(name)中的name(getValues会把带.的字符串转换成对象)
* @default false
*/
parseName?: boolean;
/**
* 仅建议PureComponent的组件打开此强制刷新功能,会带来性能问题(500个组件为例:打开的时候render花费700ms, 关闭时候render花费400ms)
* @default false
*/
forceUpdate?: boolean;
/**
* field.validate的时候滚动到第一个出错的组件, 如果是整数会进行偏移
* @default true
*/
scrollToFirstError?: boolean;
/**
* 自动删除(remove) Unmout 元素, 如果想保留数据可以设置为false
* @default true
*/
autoUnmount?: boolean;
/**
* 是否修改数据的时候就自动触发校验, 设为 false 后只能通过 validate() 来触发校验
* @default true
*/
autoValidate?: boolean;
/**
* 初始化数据
*/
values?: {};
};
export type InitResult<T> = {
id: string;
value?: T;
onChange(value: T): void;
};
export type InitResult2<T, T2> = {
id: string;
value?: T;
onChange(value: T, extra: T2): void;
};
export type Rule = {
/**
* 不能为空 (不能和pattern同时使用)
* @default true
*/
required?: boolean;
/**
* 出错时候信息
*/
message?: string;
/**
* 校验正则表达式
*/
pattern?: RegExp;
/**
* 字符串最小长度 / 数组最小个数
*/
minLength?: number;
/**
* 字符串最大长度 / 数组最大个数
*/
maxLength?: number;
/**
* 字符串精确长度 / 数组精确个数
*/
length?: number;
/**
* 最小值
*/
min?: number;
/**
* 最大值
*/
max?: number;
/**
* 对常用 pattern 的总结
*/
format?: 'url' | 'email' | 'tel' | 'number';
/**
* 自定义校验,(校验成功的时候不要忘记执行 callback(),否则会校验不返回)
*/
validator?: (
rule: Rule,
value: string | number | object | boolean | Date | null,
callback: (error?: string) => void
) => void;
/**
* 触发校验的事件名称
*/
trigger?: 'onChange' | 'onBlur' | string;
};
export type InitOption<T = any> = {
/**
* 组件值的属性名称,如 Checkbox 的是 checked,Input是 value
*/
valueName?: string;
/**
* 组件初始值(组件第一次render的时候才会读取,后面再修改此值无效),类似defaultValue
*/
initValue?: T | T[];
/**
* 触发数据变化的事件名称
* @default 'onChange'
*/
trigger?: string | 'onChange' | 'onBlur';
/**
* 校验规则
*/
rules?: Rule[] | Rule;
/**
* 组件自定义的事件可以写在这里,其他会透传(小包版本^0.3.0支持,大包^0.7.0支持)
*/
props?: any;
/**
* 自定义从组件获取 `value` 的方式,参数顺序和组件的 onChange 完全一致的
*/
getValueFormatter?: (eventArgs: any) => T;
/**
* 自定义转换 `value` 为组件需要的数据
*/
setValueFormatter?: (value: T) => T;
};
export type ValidateResults = {
errors: any[],
values: any
}
export default class Field {
/**
*
* @param contextComp 传入调用class的this
* @param options 一些事件配置
*/
constructor(contextComp: any, options?: FieldOption);
/**
*
* @param contextComp 传入调用class的this
* @param options 一些事件配置
*/
static create(contextComp: any, options?: FieldOption): Field;
/**
*
*
* @param useState React compatible `useState` function
* @returns Function
*/
static getUseField<T>(config: {useState: Function, useMemo: Function}): (options?: FieldOption) => Field;
/**
* 初始化每个组件
*/
init<T>(name: string, option?: InitOption, props?: {}): InitResult<T>;
/**
* 初始化每个组件
*/
init<T, T2>(name: string, option?: InitOption, props?: {}): InitResult2<T, T2>;
/**
*
* 重置一组输入控件的值、清空校验
* @param names 重置的字段名
*/
reset(names?: string[] | string): void;
/**
*
* 重置一组输入控件的值为默认值, 相当于reset(name, true)
* @param names 重置的字段名
*/
resetToDefault(names?: string[] | string): void;
/**
* 删除某一个或者一组控件的数据,删除后与之相关的validate/value都会被清空
* @param name 字段名称
*/
remove(name: string | string[]): void;
/**
* 校验
* @param callback
*/
validateCallback(callback?: (errors: any[], values: object) => void): void;
/**
* 校验
* @param names
* @param callback
*/
validateCallback(
names?: string[] | string,
callback?: (errors: any[], values: object) => void
): void;
/**
* 校验
* @param names
* @param callback
*/
validatePromise(
names?: string[] | string,
callback?: (errors: any[], values: object) => Promise<any>
): Promise<ValidateResults>;
/**
* 校验
* @param names
*/
validatePromise(
names?: string[] | string,
): Promise<ValidateResults>;
/**
* 校验并获取一组输入域的值与Error对象
*/
/**
* 获取所有组件的key
*/
getNames(): string[];
/**
* 获取单个输入控件的值
* @param 字段名
*/
getValue<T>(name: string): T;
/**
* 获取一组输入控件的值,如不传入参数,则获取全部组件的值
* @param names
*/
getValues<T>(names?: string[]): T;
/**
* 设置单个输入控件的值 (会触发render,请遵循react时机使用)
*/
setValue<T>(name: string, value: T): void;
/**
* 设置一组输入控件的值(会触发render,请遵循react时机使用)
*/
setValues(obj: any): void;
/**
* 设置一组输入控件的值(会触发render,请遵循react时机使用)
*/
setValues<T>(obj: T): void;
/**
* 判断校验状态
*/
getState(name: string): 'error' | 'success' | 'validating';
/**
* 获取单个输入控件的 Error
*/
getError(name: string): null | string[];
/**
* 获取一组输入控件的 Error
* @param names 字段名
*/
getErrors(names?: string[]): any;
/**
* 设置单个输入控件的 Error
* @param name
* @param errors
*/
setError(name: string, errors?: null | string[] | string): void;
/**
* 设置一组输入控件的 Error
*/
setErrors(obj: any): void;
addArrayValue<T>(key: string, index: number, ...args: T[]): void;
/**
*
* @param key 变量名
* @param index 数组的第几个
* @param howmany 删除几个,默认为1
*/
deleteArrayValue(key: string, index: number, howmany?: number): void;
}