我正在try 在Reaction中创建一个简单的常量营养素计算器,它有多个输入字段,需要用户输入数值才能进行一些计算.当前的问题是,如果用户最后一次填写"gram"输入域,则计算将无法工作,除非他更改其他每个域.每次计算都使用gramsEaten
变量,并且总是需要首先填充该变量才能正常工作.
const [gramsEaten, setGramsEaten] = useState(0);
const [totalKcal, setTotalKcal] = useState(0);
const [totalCarbs, setTotalCarbs] = useState(0);
const [totalFats, setTotalFats] = useState(0);
const [totalProtein, setTotalProtein] = useState(0);
let handleGramsEatenChange = (e) => {
let grams = e.target.value;
setGramsEaten(grams);
}
let handleKcalChange = (e) => {
let kcal = e.target.value;
setTotalKcal((gramsEaten * kcal) / 100);
}
let handleCarbsChange = (e) => {
let carbs = e.target.value;
setTotalCarbs((gramsEaten * carbs) / 100);
}
let handleFatsChange = (e) => {
let fats = e.target.value;
setTotalFats((gramsEaten * fats) / 100);
}
let handleProteinChange = (e) => {
let protein = e.target.value;
setTotalProtein((gramsEaten * protein) / 100);
}
以及输入字段结果的顺序(&A;):
<input type="number" min="0" onChange={handleKcalChange}/>
<input type="number" min="0" onChange={handleCarbsChange}/>
<input type="number" min="0" onChange={handleFatsChange}/>
<input type="number" min="0" onChange={handleProteinChange}/>
<label>How many grams have you consumed?</label>
<input type="number" min="0" onChange={handleGramsEatenChange}/>
<table>
<tbody>
<tr>
<th>Total calories</th>
<td>{Math.ceil(totalKcal)}</td>
</tr>
<tr>
<th>Total carbohydrates</th>
<td>{Math.ceil(totalCarbs)}</td>
</tr>
<tr>
<th>Total fats</th>
<td>{Math.ceil(totalFats)}</td>
</tr>
<tr>
<th>Total protein</th>
<td>{Math.ceil(totalProtein)}</td>
</tr>
</tbody>
</table>