前端可视化搭建组件值校验规则详解
作者:黄子毅 发布时间:2024-04-19 09:42:32
组件值校验,即在组件值变化时判断是否满足校验逻辑,若不满足校验逻辑,可以拿到校验错误信息进行错误提示或其他逻辑处理。
声明 valueValidator
可开启值校验:
import { ComponentMeta } from "designer";
const input: ComponentMeta = {
componentName: "input",
element: Input,
valueValidator: () => ({
required: true,
maximum: 10,
}),
};
如上面的例子,相当于对组件值做了 “不能为 undefined
且最大值为 10” 的限制。
可以内置 JSONSchema validate 的全部校验规则作为内置规则。
支持拓展自定义校验规则。
支持异步校验。
可以用 selector 绑定任意变量(如全局状态
state
或者当前组件实例的props
来灵活定义组件值校验规则)。
当校验出错时,框架也不会做任何处理,而是将错误抛给业务,由业务来判断如何处理错误。
接下来我们来详细说说每一项特征。
错误处理
定义了组件值校验后,当校验错误出现时,可以通过 selector
的 validateError
拿到错误信息:
const input: ComponentMeta = {
componentName: "input",
element: Input,
valueValidator: () => ({
required: true,
maximum: 10,
}),
runtimeProps: ({ selector }) => ({
errorName: selector(({ validateError }) => validateError.ruleName),
errorMessage: selector(({ validateError }) => validateError.payload),
}),
};
ruleName
: 校验规则名称。payload
: 该规则未命中时的返回值,校验函数返回什么,这里拿到的就是什么。内置的校验函数返回的是错误信息文案。
拿到校验错误后,通过 runtimeProps
传给组件,我们可通过组件自身或 element
增加统一的组件 React 容器层处理并展示这些错误信息。
也可以使用 fetcher
接收这个错误,并调整取数参数。总之支持 selector
的地方都可以响应校验错误,如何使用完全由你决定。
自定义校验规则
createDesigner
传递的中间件可以拓展自定义校验规则:
import { createMiddleware } from "designer";
const myMiddleware = createMiddleware({
validateRules: {
// 自定义校验规则,判断是否为空字符串
isEmptyString: (value, options?: { errorMessage?: string }) => {
if (value === "") {
return true;
}
return options.errorMessage;
},
},
});
通过 validateRules
定义自定义校验规则后,就可以在 valueValidator
中使用了:
const input: ComponentMeta = {
componentName: "input",
element: Input,
valueValidator: () => ({
isEmptyString: {
errorMessage: "字符串必须为空",
},
}),
};
用 selector 绑定校验规则
利用 selector
将校验规则绑定到任意状态,比如:
const input: ComponentMeta = {
componentName: "input",
element: Input,
valueValidator: ({ selector }) => selector(({ props }) => props.validator),
};
上面的例子,将所有组件名为 input
组件的校验规则绑定到当前组件实例的 props.validator
上。
const input: ComponentMeta = {
componentName: "input",
element: Input,
valueValidator: ({ selector }) =>
selector(({ state }) => state.validatorInfo),
};
上面的例子,将所有组件名为 input
组件的校验规则绑定绑定到全局状态 state.validatorInfo
上。
异步校验
将自定义校验函数定义为异步函数,就可以定义异步校验。
const myMiddleware = createMiddleware({
validateRules: {
isEmptyString: async (value, options?: { errorMessage?: string }) => {
await wait(1000);
if (value === "") {
return true;
}
return options.errorMessage;
},
},
});
如上所示,定义了 isEmptyString
的错误校验规则,那么当校验函数执行完后,在 1s 后将会出现校验信息。
来源:https://juejin.cn/post/7209653045310341180


猜你喜欢
- 引言with 语句是从 Python 2.5 开始引入的一种与异常处理相关的功能(2.5 版本中要通过 from __future__ im
- 不能将 SQL Server 2000 日志传送配置升级到 SQL Server 2008。数据库维护计划向导是 SQL Server 20
- 前言文章包括下几点:考点--操作SQLite数据库:创建SQLite数据库;向表中插入记录;其他数据库操作。面试题:1.面试题一:如何创建S
- 利用ASP从远程服务器上接收XML数据<% dim objXML dim objRootElement dim&n
- 以前我在mysql中分页都是用的 limit 100000,20这样的方式,我相信你也是吧,但是要提高效率,让分页的代码效率更高一些,更快一
- 几乎每个程序都需要用到图片,在小程序中我们可以通过image组件显示图片。当然小程序也是可以上传图片的,微信小程序文档也写的很清楚。上传图片
- 摘要:有时候我们只需要数据集中的一部分,并不需要全部的数据。这个时候我们就要对数据集进行随机的抽样。pandas中自带有抽样的方法。应用场景
- 如果你是一位ASP爱好者,你一定想过ASP的执行效率如何?大家都知道ASP效率和CGI的比,在访问量少的时候,它们是不相上下的,有时可能CG
- 本文实例讲述了MySQL触发器简单用法。分享给大家供大家参考,具体如下:mysql触发器和存储过程一样,是嵌入到mysql的一段程序,触发器
- 泛型,如果你学过Java ,应该对它不陌生吧。但你可能不知道在 Python 中(3.4+ ),也可以实现简单的泛型函数。在Python中只
- 前言CRUD代表: 增加(create) ,查询(retrieve) ,更新(update) ,删除(delete) 单词首字母。一、新增数
- 本文实例讲述了JS使用百度地图API自动获取地址和经纬度操作。分享给大家供大家参考,具体如下:在实际工作中我们经常会遇到这样的问题,但是当我
- 尽量避免使用DOM。当需要反复使用DOM时,先把对DOM的引用存到JavaScript本地变量里再使用。使用设置innerHTML的方法来替
- merge()1.常规合并①方法1指定一个参照列,以该列为准,合并其他列。import pandas as pddf1 = pd.DataF
- 一、多线程共享全局变量首先我们来回忆下在函数中修改全局变量的情况。在一个函数中,对全局变量进行修改的时候,到底是否需要使用 global 进
- 一、什么是单例模式?1、含义 作为对象的创建模式,单例模式确保某一个类只有一个实
- 本文实例讲述了python实现可将字符转换成大写的tcp服务器。分享给大家供大家参考。具体分析如下:下面的python代码执行后通过tcp监
- 本文实例形式讲解了Python3的条件与循环控制语句及其用法,是学习Python所必须掌握的重要知识点,现共享给大家供大家参考。具体如下:一
- 目录一、前言二、使用1.@Component2.compued、data、methods3.@props4.@watch5.@emit三 、
- 只需要在fckeditor\editor\filemanager\connectors\asp文件夹下的commands.asp修改一下即可