反应状态无法读取属性
2022-10-15
70
我遇到了一个与 react 相关的问题,它可以与单个 usestate 一起使用,但当我将其作为对象时,它失败了,这是代码:
import React, { useState } from 'react'
import {Link} from "react-router-dom"
import {DatabaseNetworkPoint} from '@icon-park/react';
import axios from "axios"
export default function Register() {
const [user, setUser] = useState({
username:"",
email:"",
password:"",
age:0,
gender:"",
})
const [file, setFile] = useState(null)
const handleChange = (event) => {
console.log(event.target.value)
setUser({
username:event.target.value,
email:event.target.value,
password:event.target.value,
age:event.target.value,
gender:event.target.value,
img:event.target.files[0]
})
setFile(event.target.files[0])
}
const handleSubmit = (event) => {
event.preventDefault()
console.log('button clicked', event.target)
}
return (
<div className='container'>
<div className='left'>
<div className='logo'>
<DatabaseNetworkPoint theme="outline" size="150" fill="#333"/>
<h1>WonderHit</h1>
</div>
<form className='form' onSubmit={handleSubmit}>
<input placeholder='Username' value={user.username} className='field' type="text" onChange={handleChange} />
<input placeholder='Email' value={user.email} className='field' type="email" onChange={handleChange} />
<input placeholder='Password' value={user.password} className='field' type="password" onChange={handleChange} />
<input placeholder='Age' value={user.age} className='field' name='age' type="number" onChange={handleChange} />
<input placeholder='Gender' value={user.gender} className='field' name='gender' type="text" onChange={handleChange} />
<div className='profilePic'>
<div className='Photo'></div>
<input className='field2' id='file' type="file" onChange={handleChange} />
<label htmlFor = "file" className='uploadPic' >+</label>
</div>
<button className='submit' type="submit">Register</button>
<h3 className='routing'>You already have an account ? <Link className='rot' to="/">Login</Link></h3>
</form>
</div>
<img className='right' src='https://images.unsplash.com/photo-1562577309-4932fdd64cd1?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1074&q=80' />
</div>
)
}
这是我收到的错误:
未捕获的 TypeError:无法读取 null 的属性(读取“0”) 可能是什么问题?是文件导致了我的问题吗?我应该将其作为字符串处理吗????
3个回答
img:event.target.files[0]
您将为每个
<input>
调用 handleChange,无论它是否是文件类型。
Julianna
2022-10-15
使用不同的处理程序,不要对每个输入更改使用相同的处理程序( handleChange ),问题是由于另一个字段更改文件类型输入返回 null 而出现的。
对上传文件使用另一个处理程序并将其设置为使用 useState 并将其用于以后的用例。
Suraj Patil
2022-10-15
这是因为这行
setFile(event.target.files[0])
你应该首先检查
event.target.files
是否存在,然后在你的状态下设置它;
event.target.files && setFile(event.target.files[0])
N.SH
2022-10-15