开发者问题收集

反应状态无法读取属性

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