javascript - 多个验证函数被视为 OR 而不是 AND
问题描述
我正在尝试遵循官方网站上的字段级验证示例。
这是我renderInput
用来渲染字段的函数。
const renderInput = ({
input,
label,
type,
meta
}) => (
<React.Fragment>
<input
{...input}
type={type}
/>
<pre>{JSON.stringify({meta}, null, 4)}</pre>
</React.Fragment>
)
这就是我所说的:
<Field
name="title"
component={renderInput}
validate={[required, minLength(10)]}
type="text"
/>
这些是我的验证功能:
const required = value => {
console.log('required', !!(value && value.length > 0) ? undefined : 'Mandatory')
return !!(value && value.length > 0) ? undefined : 'Mandatory';
};
const minLength = min => value => {
console.log(`minLength(${min})`, !!(value && value.length < min) ? `More than ${min} characters please` : undefined);
return !!(value && value.length < min) ? `More than ${min} characters please` : undefined;
}
我正在输入test
我的输入,其中:
if (required('test') && minLength(10)) // false
正在发生的事情是
if (required('test') || minLength(10)) // true
...因为其中 1 个是真的,所以验证通过了。
validate
如果其中一个元素为假,数组不应该为假吗?
还是我看错了?
解决方案
从他们的例子来看,数组中的每个传入函数似乎validate
都是按顺序运行的,第一个不返回的函数undefined
(如果有的话)将meta.error
为该字段定义。
推荐阅读
- sql - 在子查询中使用多个表
- angular - Angular 6中模块内的任何组件都可以调用Angular Bootstrap Modal
- c# - 实体框架核心。如何正确更新相关数据?
- javascript - ES6 类返回 Promise/具有 .then() 方法?
- r - 对于一列的每个值,将该值除以另一列中具有相同序列的行数(使用 R 计算多映射读取)
- multithreading - OpenCL:如果我有比可用工作项更多的任务怎么办?
- android - 使用 kotlin 处理来自 api 响应的空值
- wordpress - 如何在 Godaddy 服务器上的 WordPress 中安装 woocommerce 插件
- azure-active-directory - 如何在不使用 ADAL.js 或 MSAL.js 的情况下将我的 activiti 应用程序(版本 6)与 Azure Active Directory 端点 v2.0 集成
- python - 如何在 Keras 中保存 Scikit-Learn-Keras 模型