You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

react-querybuilder按操作符配置字段验证器及defaultValidator失效问题

问题解决方案

一、实现基于操作符的字段验证逻辑

针对phoneNumber字段,我们可以利用字段验证器的operator参数,根据当前使用的操作符执行不同的校验规则:

  • 当操作符为like或notLike时,校验值必须包含%通配符
  • 当操作符为=或!=时,校验值不能包含%通配符

修改fields数组中phoneNumber的验证器:

const fields = [
    {
        name: 'phoneNumber',
        validator: ({ operator, value }) => {
            // 校验like/notLike场景
            if (['like', 'notLike'].includes(operator)) {
                if (!value?.includes('%')) {
                    return '使用like/notLike时必须包含%通配符';
                }
            } 
            // 校验=/!=场景
            else if (['=', '!='].includes(operator)) {
                if (value?.includes('%')) {
                    return '使用=/!=时不允许包含%通配符';
                }
            }
            // 无错误时返回undefined
            return undefined;
        },
        label: formatMessage({id: 'label.phoneNumber'}),
        operators: options
    },
    {
        name: 'passportNumber',
        label: formatMessage({id: 'label.passportNumber'}),
        operators: options,
        inputType: 'number'
    },
];

二、修复defaultValidator不生效的问题

你错误地将原始QueryBuilder嵌套在QueryBuilderAntD内部,导致配置的validator无法被AntD封装组件识别。正确用法是直接使用QueryBuilderAntD作为构建器组件,将所有props直接传递给它:

替换原来的嵌套写法:

// 修改后的正确写法
<QueryBuilderAntD
    fields={fields}
    query={query}
    onQueryChange={q => setQuery(q)}
    validator={defaultValidator}
/>

QueryBuilderAntD是官方针对Ant Design封装的完整组件,内部已经集成了原始QueryBuilder的功能,直接传递props就能让defaultValidator正常生效。


内容的提问来源于stack exchange,提问作者Sena

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 02:17:15