Состояние последней формы всегда будет переопределять другие в вашем цикле.
Если вы пытаетесь определить, является ли любая одна из форм грязной, вы можете использовать Array.prototype.some()
:
export const isFormDirty = createSelector(
getForms,
getState,
(forms, state) => forms.some(form => isDirty(form)(state)) // Will return true if one of the forms are dirty, false if all forms are clean
);
В качестве альтернативы, как @Danmoreng предложил в комментариях, вы могли бы сохранить цикл и предотвратить переопределение, добавив OR '' флаг dirtyForm сам с собой:
for (let i = 0; i < forms.length; i += 1) {
// Once true, further results will not be evaluated, so no overrides
dirtyForm = dirtyForm || isDirty(forms[i])(state);
}
Или, как @Icepickle предложил в комментариях, вы можете просто разорвать цикл, когда натолкнетесь на грязную форму:
for (let i = 0; i < forms.length; i += 1) {
// Exit the loop by returning true if a form is dirty
// Might be wise to add a "return false;" outside the loop with this approach.
if(isDirty(forms[i])(state)) {
return true;
}
}