javascript - React 计算器中的复选框
问题描述
我正在构建具有几个不同输入的计算器,其中一个也是复选框。
主要思想是默认复选框被选中,但用户可以取消选中它,当然最终值会改变(它将减去复选框值)
例子:
const [value1, setValue1] = useState(0);
const [value2, setValue2] = useState(0);
<FormControl
aria-label="value1"
onChange={(event) =>
setValue1(event.target.value)
}
placeholder={value1}
/>
<FormControl
aria-label="value2"
onChange={(event) =>
setValue1(event.target.value)
}
placeholder={value2}
/>
复选框值来自乘法 value1 * value2
const [checkbox, setCheckbox] = useState(false);
useEffect(() => {
setCheckbox(value1 * value2);
}, [ value1 ,value2 ]);
现在我不确定如何在输入中处理这个,这就是我尝试过的:
<Form.Check
checked={checkbox}
onCheck={() => setCheckbox(!checkbox)}
/>
输出是:
- 默认情况下,该复选框未选中
- 当 value1 和 value2 被设置时,复选框突然被选中
- 当我尝试取消选中该框时 - 它不允许我这样做
预期输出:
- Checkbox默认勾选,默认值为0,设置value1和value2时,checkbox获取这两个值相乘的值
- 允许用户取消选中该框,来自的最终值
value1 * value2 + checkbox
将得到更新减去复选框值
解决方案
要处理此问题,您必须使用复选框事件的属性checked
和value
。
对于上述情况,您需要有 2 个不同的状态。
const [checked, setChecked] = useState(true);
const [checkboxValue, setCheckboxValue] = useState(0);
现在您的表单检查应该如下所示,
<Form.Check
checked={checked}
value={checkboxValue}
onCheck={(event) => setChecked(event.target.checked)}
/>
您的,useEffect
块仍然保持不变(只需更改setCheckbox
为),并且setCheckboxValue
任何更改都应自动反映在复选框的值中。value1
value2
为了在未选中复选框时更新最终值,您可以使用另一个useEffect
useEffect(() => {
if(!checked) {
setCheckboxValue(checkboxValue - value1 * value2);
}
}, [checked])
推荐阅读
- javascript - 这段代码有什么问题?为什么它没有按我希望的方式工作..?
- http - 如何每5分钟自动重复一次我在fiddler中编写的http post请求?
- r - 如何使用 read.csv2.sql 在不解压缩的情况下读取 zip 文件?
- python - 通过 cx_Freeze 将 py 转换为 exe,启动时出现回溯错误
- python - 如何创建每行的列集不同的 Pandas 数据框?
- pandas - 在其他行的 31 天内有效地查找行
- python - 在 for 循环中连接 numpy 数组
- material-ui - 将 jss 类名添加到 jsx 元素数组
- python - 使用 Pandas 读取 excel 文件时跳过特定行
- c# - 使用.net mvc 5在多对多表关系中列出数据