【发布时间】:2021-03-27 10:11:46
【问题描述】:
我正在处理一个由用户填写的表单,并且应该根据输入的数据同时更新其他输入字段。例如,如果我们有 3 个输入字段,分别是数字 1、数字 2 及其总和。我们如何根据用户类型更新它们中的每一个?我当前实现的问题是它并不总是有效。如果一个字段 id 自动呈现并且我尝试手动更改它,那么一切都会停止。换句话说,应用程序没有考虑从公式计算的值,它们只是呈现在字段中。
import React, { useState } from 'react';
const Calculations = () => {
const [values,setValues]=useState({first:"",second:"",sum:""})
const [first,setFirst]=useState('')
const [second,setSecond]=useState('')
const [sum,setSum]=useState('')
const onChange=(e)=>{
let name=e.target.name;
let value=e.target.value;
const newValues = {
...values,
[name]: value
}
setValues(newValues)
calcSum(newValues)
calcfirst(newValues)
calcSecond(newValues)
}
const calcSum = (newValues) => {
const { first,second} = newValues;
const newSum = parseInt(first,10)+parseInt(second,10)
setSum(newSum)
}
const calcfirst = (newValues) => {
const { sum,second} = newValues;
const newFirst = parseInt(sum,10)-parseInt(second,10)
setFirst(newFirst)
}
const calcSecond = (newValues) => {
const { sum,first} = newValues;
const newSecond = parseInt(sum,10)-parseInt(first,10)
setSecond(newSecond)
}
return ( <form>
<div style={{display:"flex",flexDirection:"column"}}>
<label htmlFor="first">First</label>
<input onChange={onChange} defaultValue={first} name='first' id="first" type="number"/>
<label htmlFor="second">Second</label>
<input onChange={onChange} defaultValue={second} name="second" id="second" type="number"/>
<label htmlFor="sum">Total</label>
<input onChange={onChange} defaultValue={sum} id="sum" name="sum" type="number"/>
</div>
</form> );
}
export default Calculations;
【问题讨论】:
标签: reactjs input react-hooks state