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 中受益匪浅。
添加回答
举报
