You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React项目本地运行出现Uncaught TypeError错误求助

问题:React项目运行时出现Uncaught TypeError: Cannot read properties of undefined (Reading '***')错误

我是JavaScript、React新手,正通过YouTube视频学习开发。代码在Visual Studio中无报错,但本地运行时出现大量「Uncaught TypeError: Cannot read properties of undefined (Reading '***')」错误。以下是我的项目代码:

App.js 文件

import "./App.css";
import Form from "./Components/Form";

function App() {
  return (
    <div className="App">
      <Form />
    </div>
  );
}

export default App;

Form.js 文件(位于项目的components文件夹中)

import React from "react";
import "../App.css";
import {useForm} from "react-hook-form";
import { yupResolver } from "@hookform/resolvers/yup";
import * as yup from "yup";

const schema = yup.object().shape({
    Name: yup.string().required(),
    AddressLine1: yup.string().required(),
    AddressLine2: yup.string().required(),
    AddressLine3: yup.string().required(),
    AddressLine4: yup.string().required(),
    City: yup.string().required(),
    StateProvinceCounty: yup.string().required(),
    Postcode: yup.string().required(),
    Country: yup.string().required(),

})

function Form() {
    const {register, handleSubmit, errors} = useForm({
        resolver: yupResolver(schema)});

const submitForm = (data) =>{
    console.log(data);
};

    return (
        <div className= "Form">
            <div className="title"> Details</div>
            <div className="inputs">
            <form onSubmit={handleSubmit(submitForm)}>
                    <input type="text" 
                    name="Name" 
                    placeholder=" Name" 
                    ref={register}/>
                    <p>{errors.Name?.message}</p>
                    <input 
                        type="text" 
                        name="AddressLine1" 
                        placeholder="AddressLine1" 
                        ref={register}
                    />
                    <p>{errors.AddressLine1?.message}</p>
                    <input 
                        type="text" 
                        name="AddressLine2" 
                        placeholder="AddressLine2" 
                        ref={register}
                    />
                    <p>{errors.AddressLine2?.message}</p>
                    <input 
                        type="text" 
                        name="AddressLine3" 
                        placeholder="AddressLine3" 
                        ref={register}
                    />
                    <p>{errors.AddressLine3?.message}</p>
                    <input 
                        type="text" 
                        name="AddressLine4" 
                        placeholder="AddressLine4" 
                        ref={register
                    }/>
                    <p>{errors.AddressLine4?.message}</p>
                    <input 
                        type="text" 
                        name="City" 
                        placeholder="City" 
                        ref={register}
                    />
                    <p>{errors.City?.message}</p>
                    <input 
                        type="text" 
                        name="StateProvinceCounty" 
                        placeholder="City" 
                        ref={register}
                    />
                    <p>{errors.StateProvinceCounty?.message}</p>
                    <input 
                        type="text" 
                        name="Postcode" 
                        placeholder="City" 
                        ref={register}
                    />
                    <p>{errors.Postcode?.message}</p>
                    <input 
                        type="text" 
                        name="Country" 
                        placeholder="City" 
                        ref={register}
                    />
                    <p>{errors.Country?.message}</p>
                </form>
            </div>
        </div>
    );

}

export default Form;

Index.js 文件

import React from "react";
import ReactDOM from "react-dom/client";
import App from "./App";
import reportWebVitals from "./reportWebVitals";

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<App />
);
reportWebVitals();
问题排查与解决

错误核心原因

你使用的是react-hook-form v7版本,但代码写法仍沿用了v6及更早版本的逻辑:v7中已经移除了顶层的errors对象,直接解构errors会得到undefined,当你尝试访问errors.Name?.message这类属性时,就会抛出「Cannot read properties of undefined」的错误。

修复步骤

只需修改Form组件里useForm的解构代码:

原有代码:

const {register, handleSubmit, errors} = useForm({
    resolver: yupResolver(schema)});

修改为:

const {register, handleSubmit, formState: { errors }} = useForm({
    resolver: yupResolver(schema)});

额外优化建议

你的部分输入框placeholder存在错误,比如StateProvinceCounty、Postcode、Country的placeholder都写为"City",建议修正为对应字段的提示文字,例如将StateProvinceCounty的placeholder改为"State/Province/County",提升用户体验。


内容的提问来源于stack exchange,提问作者SamHam30

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 22:00:23