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

React项目EnrolList.js无法读取num属性的错误排查求助

错误原因分析及修复建议

1. Props传递的双重错误

在App.js调用EnrolList组件时,存在两个关键问题:

<EnrolList setStudentDetails={()=>setStudentDetails} studentDetail={()=>studentDetails}/>
  • 属性名称不匹配:你传递的属性是studentDetail(单数),但在EnrolList组件中尝试访问的是props.studentDetails(复数),直接导致props.studentDetails为undefined,自然无法读取num属性。
  • 错误包裹为函数:你把studentDetails状态和setStudentDetails更新函数都包裹成了箭头函数传递,导致EnrolList拿到的不是实际值和方法,而是返回它们的函数。正确写法应该是直接传递:
    <EnrolList setStudentDetails={setStudentDetails} studentDetails={studentDetails}/>
    

2. 初始状态未做空值判断

App.js中studentDetails的初始状态是空对象{},组件第一次渲染时,EnrolList的useEffect会执行,此时props.studentDetails是空对象,直接访问props.studentDetails.num会触发读取未定义属性的错误。即使修复了props传递,也需要先做空值判断:

const curItemKey = props.studentDetails?.num; // 使用可选链操作符避免报错

3. 非React状态导致数据丢失

EnrolList中用let items = []存储学生列表,这是普通变量而非React状态。组件重新渲染时这个变量会被重置,无法持久化存储已注册的学生数据。应该改用useState管理列表:

const [items, setItems] = React.useState([]);

并在useEffect中正确更新状态:

React.useEffect(()=>{
    const curItemKey = props.studentDetails?.num;
    if(curItemKey){
        setItems(prevItems => [...prevItems, props.studentDetails]);
        props.setStudentDetails({});
    }
},[props.studentDetails, props.setStudentDetails]);

内容的提问来源于stack exchange,提问作者Ang Theow Meng

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 04:23:10