3 回答

TA貢獻1815條經驗 獲得超6個贊
修復 handleChange 是關鍵!
const handleChange = (e) => {
e.persist();
console.log(e);
console.log(e.target.name);
console.log(e.target.value);
setStep((state) => ({
...state,
generalInfo: { ...state.generalInfo, [e.target.name]: e.target.value },
}));
console.log(step);
};

TA貢獻1799條經驗 獲得超6個贊
您的功能handleChange不正確,它刪除了step除當前更改的字段之外的所有狀態字段。如果它使用來自狀態的數據,這可能會導致另一個組件崩潰step
它應該是
const handleChange = (e) => {
console.log(e);
console.log(e.target.name);
console.log(e.target.value);
setStep({ ...step, [e.target.name]: e.target.value }); <= HERE
console.log(step);
};

TA貢獻1906條經驗 獲得超3個贊
我相信它在您的 handleChange 方法中的 setStep
setStep({ [e.target.name]: e.target.value });
useState 不會以與 this.setState 相同的方式合并,因此階段被覆蓋并且您的 switch 語句不會返回渲染。
相反,您需要傳遞一個函數來迭代狀態
setStep((state) => ({...state, generalInfo: {...state.generalInfo, [e.target.name]: e.target.value}}))
但是考慮到嵌套的數量,e.target.name 的位置很難找到;你會從使用 useReducer 而不是 useState 中受益匪淺。
添加回答
舉報