Reactjs 无法分配给只读属性';名称';对象的'#&书信电报;对象>';?
我正在尝试更改该值,但遇到以下错误“无法将其分配给对象“#”的只读属性“name”?” 参考代码Reactjs 无法分配给只读属性';名称';对象的'#&书信电报;对象>';?,reactjs,typescript,Reactjs,Typescript,我正在尝试更改该值,但遇到以下错误“无法将其分配给对象“#”的只读属性“name”?” 参考代码 interface MyForm { name:string, passwor:string, [key:string]:any } const [student,setStudent] = useState<MyForm>( { name:'', password:'' } ) const handleFo
interface MyForm
{
name:string,
passwor:string,
[key:string]:any
}
const [student,setStudent] = useState<MyForm>(
{
name:'',
password:''
}
)
const handleForm = (e:React.ChangeEvent<HTMLInputElement>) =>{
const key : string = e.target.id
student[key] = e.target.value
setStudent({...student})
}
<input id="name" label="enter name" value={student.name} onchange={handleForm} />
<input id="password" label="enter name" value={student.name} onchange={handleForm} />
接口MyForm
{
名称:string,
密码:字符串,
[键:字符串]:任何
}
常量[学生,设置学生]=使用状态(
{
名称:“”,
密码:“”
}
)
常量handleForm=(e:React.ChangeEvent)=>{
常量键:string=e.target.id
学生[key]=e.target.value
setStudent({…student})
}
编辑
我解决了这个问题,对handleForm进行了更改
const handleForm = (e:React.ChangeEvent<HTMLInputElement>) =>{
const {name,value} = e.target
setStudent({...student,[name]:value})
}
常量handleForm=(e:React.ChangeEvent)=>{
常量{name,value}=e.target
setStudent({…student,[名称]:值})
}
谢谢。将代码更新为:
interface MyForm
{
name:string,
password:string
// [key:string]:any
}
type FormField = keyof MyForm;
function MyComponent(props) {
const [student,setStudent] = useState<MyForm>(
{
name:'',
password:''
}
)
const handleForm = (e:React.ChangeEvent<HTMLInputElement>) =>{
const key : FormField = e.target.name; // If it not work then use const key:FormField = e.target.name as any; // Usually we should avoid any
student[key] = e.target.value
setStudent({...student})
}
return (
<>
<!-- Add name attribute here -->
<input id="name" name="name" label="enter name" value={student.name} onChange={handleForm} />
<!-- A Update here -->
<input id="password" name="password" label="enter name" value={student.password} onChange={handleForm} />
</>
);
}
接口MyForm
{
名称:string,
密码:string
//[键:字符串]:任何
}
FormField类型=MyForm的键;
功能MyComponent(道具){
常量[学生,设置学生]=使用状态(
{
名称:“”,
密码:“”
}
)
常量handleForm=(e:React.ChangeEvent)=>{
const key:FormField=e.target.name;//如果它不起作用,那么使用const key:FormField=e.target.name作为任意项;//通常我们应该避免使用任意项
学生[key]=e.target.value
setStudent({…student})
}
返回(
);
}
检查此项是否回答了您的问题?不,我检查过了,但是没有帮助。我建议您首先修复代码中的任何问题,比如passwor:string,
在这里作为起点对我来说似乎是错误的<代码>设置学生是否未定义?(顺便说一句,我发现name
的id可能不是一个经过深思熟虑的“name”值)属性存在于html中,即您的e.target.name
是对name属性的不存在引用,而不是id属性。因此这确实是一个输入错误,可能应该关闭,因此请立即检查编辑。我从代码yatin获得了帮助,但在“student[key]处出现错误(“字符串不可分配给never”)'您能告诉我行号吗?在student[key]上,理想情况下不应该发生。您能确认键名是否正确。它们与MyForm类型定义中的相同。我自己解决了