小编典典

如何使用一个钩子使用一个事件处理函数动态更新任何输入字段的值

reactjs

TL; DR

有没有一种方法可以像事件状态组件那样使用一个事件处理函数来动态更新输入字段的值。

我正在使用2个字段的登录表单。电子邮件和密码。当我使用表示两个字段的2
useState时,然后当我使用handleChange更新状态时,两个状态都将得到更新。这不是意图。

   const [email, setEmail] = useState()
   const [password, setPassword] = useState()

    const handleChange = e => {
        const {value} = e.target
        setEmail(value)
        setPassword(value)
    }

我不想使用多个事件处理程序来处理每个输入字段。我试过了

    const [state , setState] = useState({
        email : "",
        password : ""
    })

    const handleChange = e => {
        const {name , value} = e.target
        setState({
            [name] : value
        })
    }

但这会一次更新一个属性。并且其他财产价值迷失了。因此,有什么方法可以像事件状态组件那样使用一个事件处理函数来更新所有输入字段。

    this.state = {
      email : "",
      password : ""
    }

    const handleChange = e => {
        const {name , value} = e.target
        this.setState({
           [name] : value
        })
    }

阅读 341

收藏
2020-07-22

共1个答案

小编典典

您应该将setState与回调函数一起使用:

setState(prev => ({ 
    ...prev,
    email: 'new mail',
}))

您将创建一个新的状态对象,该对象由先前的状态创建。而且您可以覆盖所需的任何内容。如果您有一个复杂的状态对象,则需要更多的新对象。

2020-07-22