const [fieldValues, updateFieldValues] = useState(fromJS({
imageName: '',
tags: [],
password: '',
}));
const handleButtonClick = () => {
const res = // logic to find which field/fields are empty
}
我如何验证所有键是否都有值? ps:我有以下要求。
答案 0 :(得分:0)
您可以使用 Yup 一个 javascript 库来验证使用预定义架构的值。或者你可以写一个函数返回不符合要求的对象的键
自定义 JS 方法
function validateObj(obj) {
let isValid = true;
const errorKeys = [];
Object.entries(obj).forEach(([key, value]) =>{
if(!value) {
errorKeys.push(key)
isValid = false;
return;
}
if(Array.isArray(value)) {
if(!value?.length) {
errorKeys.push(key)
isValid = false;
return;
}
}
})
return { isValid, errorKeys }
}
不可变的 JS 方法
function validateObj(obj) {
let isValid = true;
const errorKeys = [];
console.log(obj)
obj.mapEntries(([key, value]) =>{
console.log(key, value)
if(!value) {
errorKeys.push(key)
isValid = false;
return;
}
if(List.isList(value)) {
if(!value.size) {
errorKeys.push(key)
isValid = false;
return;
}
}
})
return { isValid, errorKeys }
}
用法:
const handleButtonClick = () => {
const { isValid, errorKeys } = validateObj(obj);
if(!isValid) {
// SHOW ERROR MESSAGE HERE
}
}
如有任何问题/疑问,请随时与我们联系
答案 1 :(得分:0)
Immutable.js 集合是 Iterables,因此您可以对它们使用 for ... of
和其他常见交互。它还提供了多种查看数据的方式,例如 forEach, find, findKey, findValue, filter
。看看docs,它们很好。下面是一些示例:
const thing = Immutable.fromJS({
banana: 'scale',
imageName: '',
tags: [],
password: '',
});
for([key, val] of thing) {
console.log('for of', key, ':', val);
}
thing.forEach((key, val) => {
console.log('forEach', key, ':', val);
});
const firstItemIdoNotLike = thing.findKey((key, val) => {
if(!!val) {
return true;
}
if (val.hasOwnProperty('length')) {
return val.length < 1;
}
return false;
});
if (firstItemIdoNotLike) {
console.log('validation error on', firstItemIdoNotLike);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/4.0.0-rc.12/immutable.js"></script>