Я использую ловушку React useReducer для обработки сложных многослойных данных формы в состоянии.
Я следовал указаниям этого урока: https://levelup.gitconnected.com/handling-complex-form-state-using-react-hooks-76ee7bc937.
В учебнике состояние флажка устанавливается на верхнем уровне объекта состояния. Тем не менее, флажок My находится ниже верхнего слоя (точнее, уровня 3). Проблема в том, что мой компонент-флажок изменит свое значение состояния, но будет располагаться на верхнем уровне, а не там, где он должен быть на уровне 3.
Состояние учебника
isMember находится на верхнем уровне
const initialState = {
firstName: "",
lastName: "",
address: {
addressLine1: "",
addressLine2: "",
pinCode: ""
},
isMember: false
};
Мое состояние
включено ниже верхнего уровня
const initState =
{
radio:{
tx: {
name:'',
enabled:'',//THIS IS WHERE THE STATE SHOULD CHANGE.
parameters:{
frequency:'',
bandwidth:'',
},
},
}
//BUT THIS IS WHERE IT IS GETTING SET.
};
Ниже приведена моя реализация функции updateForm:
const updateForm = React.useCallback(({ target: { value, name, type } }) => {
const updatePath = name.split(".");
console.log("updateForm | updatePath: ", updatePath);
// Set top-level key-pairs.
// Just need specific component & value to update.
if (updatePath.length === 1) {
const [id] = updatePath;
dispatch({
type: "TF",
[id]: value
});
}
// Set key-pairs that're below top-level.
// Need "path" to component ('name') & value to update.
// More condensed solution, rather than multiple if(length === 3,4,...).
if (updatePath.length >= 2) {
// Set checkboxes.
if (type === "checkbox") {
let elem = updatePath[updatePath.length - 1];
dispatch(prevState => ({
[name]: !prevState[name]
}));
return;
}
dispatch({
_path: updatePath,
_value: value
});
}
}, []);
Я испробовал множество различных подходов к функции диспетчеризации и функции редуктора. Я также пытался понять взаимосвязь между функциями диспетчеризации и редуктора, но я не нашел ничего, что помогло бы мне понять, что происходит, когда параметр действия редуктора имеет функцию типа.
Я мог бы действительно использовать вашу помощь, чтобы понять, что происходит с отношением функции диспетчеризации / редуктора в этом руководстве. Из того, что я исследовал, это единственная реализация, которая использует тип конструктора параметра действия редуктора для принятия решений (используя конструктор === Function & constructor === Object). Из того, что я понимаю, обычно вместо этого используется оператор switch (), и это все, что я смог найти в Интернете.
Я также мог бы использовать вашу помощь, чтобы понять, как получить свой флажок для правильного изменения его значения. в состоянии. Как мне изменить состояние этого компонента, который находится ниже верхнего слоя?