【问题标题】:TypeError: Cannot read property 'trim' of undefined in ReactJSTypeError:无法读取 ReactJS 中未定义的属性“修剪”
【发布时间】:2021-03-29 07:15:51
【问题描述】:

代码返回错误 TypeError: Cannot read property 'trim' of undefined,

const [category, setCategory] = useState();

const classes = useStyles();
const [fields, setFields] = useState([''
]);


const onChangeHandler = (e, i) => {                            
    const { name , value } = e.target
    const currentFields = [...fields];
    currentFields[i] = value;
    setFields(currentFields)
}

//Validators

const [errors, setErrors] = useState ('');

const onSubmit = (e) => {
    e.preventDefault()
    let errors = {};
    if (!category.trim()){
        errors.category="Select Type of Category is Required"
    }
    if (!fields.trim()){
        errors.fields="Field is Required/Remove empty Fields"
    }
    setErrors(errors)
    if (Object.keys(errors).length === 0){
        formSubmit()
    }
}

【问题讨论】:

    标签: reactjs validation


    【解决方案1】:

    据我所知,您的category 状态初始值未定义。

    const [category, setCategory] = useState();
    

    您应该为其提供一个有效的字符串值。

    const [category, setCategory] = useState("");
    

    替代方法是使用空检查

    if (category && !category.trim()){
      errors.category="Select Type of Category is Required"
    }
    

    或可选链接

    if (!category?.trim()){
      errors.category="Select Type of Category is Required"
    }
    

    注意: 任何其他时候更新category 状态时,您还应该确保保持状态不变量,即它应该总是一个字符串,或者在访问时应用相同的替代检查那个状态。

    【讨论】:

    • 第一个关于类别作品的字符串值。但字段返回不是函数,谢谢您的回答先生。
    • @JasperBumatay fields 是一个数组,所以没有trim 方法可以调用。您是要检查fields 数组长度(if (!fields.length) {.....),还是更类似于检查每个字段值是否为修剪过的非空字符串(if (fields.length && fields.every(el => el.trim())) {.....)?您能否澄清“字段作为非函数返回”是什么意思?
    猜你喜欢
    • 2021-12-06
    • 2022-07-22
    • 2019-05-07
    • 2020-07-30
    • 1970-01-01
    • 1970-01-01
    • 2021-01-09
    • 1970-01-01
    • 2023-04-08
    相关资源
    最近更新 更多