Javascript 使用useState和prev state更新状态时出现问题
我的代码如下:Javascript 使用useState和prev state更新状态时出现问题,javascript,reactjs,forms,web-applications,react-hooks,Javascript,Reactjs,Forms,Web Applications,React Hooks,我的代码如下: const[registryFormState,setRegistryFormState]=useState({ 电子邮件:空, 用户名:null, 密码:null, confirmPassword:null, }); 常量changeFormHandler=(值,输入标识)=>{ 开关(输入标识){ “电子邮件”案例: 返回setRegistryFormState((prevState)=>({ …国家, 电子邮件:value, })); 案例“用户名”: 返回setRegi
const[registryFormState,setRegistryFormState]=useState({
电子邮件:空,
用户名:null,
密码:null,
confirmPassword:null,
});
常量changeFormHandler=(值,输入标识)=>{
开关(输入标识){
“电子邮件”案例:
返回setRegistryFormState((prevState)=>({
…国家,
电子邮件:value,
}));
案例“用户名”:
返回setRegistryFormState((prevState)=>({
…国家,
用户名:value,
}));
案例“密码”:
返回setRegistryFormState((prevState)=>({
…国家,
密码:value,
}));
案例“确认密码”:
返回setRegistryFormState((prevState)=>({
…国家,
confirmPassword:值,
}));
违约:
回来
}
};
您可以使用registryFormState
来分解结构,而不是像这样使用prevState
:
import React from "react";
export default function Lol() {
const [registryFormState, setRegistryFormState] = React.useState({
email: null,
username: null,
password: null,
confirmPassword: null
});
const changeFormHandler = (value, inputIdentify) => {
switch (inputIdentify) {
case "email":
setRegistryFormState({
...registryFormState,
email: value
});
break;
case "username":
setRegistryFormState({
...registryFormState,
username: value
});
break;
case "password":
setRegistryFormState({
...registryFormState,
password: value
});
break;
case "confirmPassword":
setRegistryFormState({
...registryFormState,
confirmPassword: value
});
break;
default:
break;
}
};
return (
<div>
<input onChange={e => changeFormHandler(e.target.value, "email")} />
<input onChange={e => changeFormHandler(e.target.value, "username")} />
<input onChange={e => changeFormHandler(e.target.value, "password")} />
<input
onChange={e => changeFormHandler(e.target.value, "confirmPassword")}
/>
<button onClick={() => console.log(registryFormState)}>Submit</button>
</div>
);
}
从“React”导入React;
导出默认函数Lol(){
常量[registryFormState,setRegistryFormState]=React.useState({
电子邮件:空,
用户名:null,
密码:null,
确认密码:null
});
常量changeFormHandler=(值,输入标识)=>{
开关(输入标识){
案例“电子邮件”:
setRegistryFormState({
…registryFormState,
电子邮件:value
});
打破
案例“用户名”:
setRegistryFormState({
…registryFormState,
用户名:value
});
打破
案例“密码”:
setRegistryFormState({
…registryFormState,
密码:value
});
打破
案例“确认密码”:
setRegistryFormState({
…registryFormState,
confirmPassword:value
});
打破
违约:
打破
}
};
返回(
changeFormHandler(e.target.value,“email”)}/>
changeFormHandler(e.target.value,“用户名”)}/>
changeFormHandler(e.target.value,“密码”)}/>
changeFormHandler(e.target.value,“confirmPassword”)}
/>
console.log(registryFormState)}>Submit
);
}
请为此创建一个用于显示问题发生的列表。出于演示目的,只需使用一个对象属性,如{email:null}
对我来说很好。您确定inputIdentity的值是正确的吗?问题还可能是您在哪里使用状态(控制台日志)。控制台日志需要具有访问新状态的权限。你能给我看看吗?对于读和重构的目的,你可以考虑使用返回{……PROVATE,[IMPUTIDENICYY]:值,},而不是交换机的情况。