См. Код ниже. В операторе возврата я пытаюсь добавить компоненты со структурой:
- входы
- inputId
- rowId
- значение
- isValid
- rowId
- значение
- isValid
- inputId
- rowId
- значение
- isValid
- rowId
- value
- isValid
Однако, когда я пытаюсь использовать синтаксис распространения для сохранения состояния и просто добавлять узлы в состояние, я не могу загрузить уже определенные компоненты rowId для указанного c inputId, потому что синтаксис, подобный следующему, не работает ...state.inputs.[action.inputId].rowId
.
В настоящее время происходит то, что «состояние» всегда содержит только один компонент rowId (последний one), потому что он перезаписывает предыдущие, потому что я не могу правильно использовать синтаксис распространения для сохранения исходного состояния.
Код:
const formReducer = (state, action) => {
switch (action.type) {
case 'INPUT_CHANGE':
let formIsValid = true;
for (const inputId in state.inputs) {
if (inputId === action.inputId) {
formIsValid = formIsValid && action.isValid;
} else {
formIsValid = formIsValid && state.inputs[inputId].isValid;
}
}
return {
...state,
inputs: {
...state.inputs,
[action.inputId]: {
[action.rowId]: { //This is the problematic line ... I would like to execute ' ...state.inputs.[action.inputId].rowId ' before this line
value: action.value,
isValid: action.isValid
}
}
},
isValid: formIsValid
};
default:
return state;
}
};