开发者问题收集

使用 onChange 进行 React 输入验证

2022-07-13
1633

我有一个数字输入,我想用 onChange 来验证它,但是当所述输入被清除时,React 会抛出 ReferenceError: value is not defined ,这是可以理解的 - 它没有什么可验证的。

我正在使用这种方法 [答案]

我正在使用功能组件,这是我的代码片段:

const [formData, setFormData] = React.useState({
        userTeamChosen: "",
        eventNumber: 0,
        value: 0,
        ethValue: 0})

    function handleNumeric(event) {
        const { name, checkedValue, min, max } = event.target
        value = Math.max(Number(min), Math.min(Number(max), Number(value)));
        setFormData(prevFormData => {
            return {...prevFormData,[name]: checkedValue}})}

    <input
        type="number"
        name="value"
        value={formData.value}
        onChange={handleNumeric}
        min="5"
        max="10000000"/>

当输入为空时,我应该如何更改我的验证,以保留在 onChange 中,但不出错? 提前致谢!

3个回答

数字 input 元素中没有 checkedValue 属性,请改用 valueAsNumbervalue

function handleNumeric(event) {
    const { name, valueAsNumber, min, max } = event.target
    const result = Math.max(+min, Math.min(+max, !Number.isNaN(valueAsNumber) ? valueAsNumber : +min));
    setFormData(prevFormData => {
        return {...prevFormData,[name]: result}})}
Mina
2022-07-13

看起来你已经接近自己解决这个问题了 :D

我注意到的唯一错误是值变量没有在任何地方声明或定义,为了解决这个问题,我刚刚添加了 formData 以便 react 知道它是 formData 的值正在使用而不是一些随机值

function handleNumeric(event) {
    const { name, checkedValue, min, max } = event.target
    formData.value = Math.max(Number(min), Math.min(Number(max), Number(formData.value)));
    setFormData(prevFormData => {
        return {...prevFormData,[name]: checkedValue}})}
Joseph Walker
2022-07-13

您应该拨打

function handleNumeric(event) {
        const { name, checkedValue, min, max } = event.target
        formData.value = Math.max(Number(min), Math.min(Number(max), Number(formData.value)));
        setFormData(prevFormData => {
            return {...prevFormData,[name]: checkedValue}})}
Zahra
2022-07-13