我们可以使用闭包来实现这一点,因此我们创建了一个接受标准化函数数组的函数。
请注意,这与验证不同,因为在验证中,如果其中一个功能失败,则所有功能都不相关,这意味着验证失败。
在规范化中,传递给每个规范化函数的值需要从已经进行了一些规范化的前一个函数传递。
所以我们可以使用normalizeAll
下面的函数来做到这一点
function normalizeAll(normalizers){
return function(value , previousValue , allValues , previousAllValues){ //note that these arguments are passed by default from redux form
var i = 0;
var normalizersLength = normalizers.length;
var currentValue = value;
while(i < normalizersLength)
{
var currentNormalizer = normalizers[i];
if(typeof currentNormalizer == "function")
{
currentValue = currentNormalizer(currentValue ,previousValue , allValues , previousAllValues);
}
i++;
}
return currentValue;
}
}
//I am using only the `value` argument in normalization functions just for the example, but you can use the rest of them if they are needed
var firstNormalization = function(value , previousValue , allValues , previousAllValues){
return value+1;
}
var secondNormalization = function(value, previousValue , allValues , previousAllValues){
return value+2;
}
var thirdNormalization = function(value, previousValue , allValues , previousAllValues){
return value+3;
}
//To test result: i will execute the function returned from normalizeAll and pass the first argument as 1.
var normalizedValue = normalizeAll([firstNormalization , secondNormalization , thirdNormalization])(1);
console.log(normalizedValue); // 7
现在要normalizeAll
在你的 redux 表单中使用,你会做这样的事情
normalize={normalizeAll([firstNormalizationFunction , secondNormalizationFunction])}
请注意,这是假设所有规范化函数都是同步的,我认为我们通常不会有规范化函数需要异步的用例,但解决方案仍然是相同的,但是我们将使用callback
函数或promise