Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.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
Reactjs 无法分配给只读属性';名称';对象的'#&书信电报;对象>';?_Reactjs_Typescript - Fatal编程技术网

Reactjs 无法分配给只读属性';名称';对象的'#&书信电报;对象>';?

Reactjs 无法分配给只读属性';名称';对象的'#&书信电报;对象>';?,reactjs,typescript,Reactjs,Typescript,我正在尝试更改该值,但遇到以下错误“无法将其分配给对象“#”的只读属性“name”?” 参考代码 interface MyForm { name:string, passwor:string, [key:string]:any } const [student,setStudent] = useState<MyForm>( { name:'', password:'' } ) const handleFo

我正在尝试更改该值,但遇到以下错误“无法将其分配给对象“#”的只读属性“name”?”

参考代码


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类型定义中的相同。我自己解决了