Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用useState和prev state更新状态时出现问题_Javascript_Reactjs_Forms_Web Applications_React Hooks - Fatal编程技术网

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]:值,},而不是交换机的情况。