React课程项目开发时出现Unexpected token, expected "," (49:8)报错求助
报错根因与修复步骤
核心语法问题(直接触发当前编译报错)
之前你尝试给JSX内容套包裹元素没用,是因为报错根本不是JSX的结构问题,是循环逻辑的语法漏写打乱了解析顺序,解析器的报错定位不准才把错误指到了return行。
你写的forEach遍历逻辑存在两处硬伤:
- 调用
forEach时漏了闭合的右括号。你在写完所有循环内的判断逻辑后,没有加上)来结束forEach方法的调用,就直接写了return语句,JS解析器走到return位置时,发现前面的方法调用还没结束,就会抛出Unexpected token, expected ","的报错,报错行号正好对应你写return的49行位置,完全匹配。 - 遍历对象写错:本来应该遍历你提前拿到的
courses数组,你错写成了console.forEach,这个错误就算把语法括号补上,运行时也会直接抛console.forEach is not a function的异常,因为console是浏览器调试对象,根本不存在forEach方法。
附带的常见笔误(修复语法问题后会影响功能)
这些是基础细节漏写,不触发当前编译报错,但会导致功能异常:
- 回调 props 大小写不统一:你在组件里传的属性名一会儿写
editCallback(小写c),一会儿写editCallBack(大写C),而且取值的时候也搞混了大小写,会导致回调函数传值为undefined,点击编辑按钮没有反应。 - 第三个判断分支里给CourseRow传属性时,写的
editCallback={this.props.editCallBack}也是大小写混同的问题。
修复后的关键代码段
// 替换原来写反的console.forEach部分 courses.forEach((c) => { // 改回遍历courses数组,替换错写的console console.log("Received a course: " + c.id + " " + c.prefix + " "+ c.number); if (c.id === 1) { console.log("--course 1 " + c.course); rows.push( <CourseRow course={c} key={c.id} editCallback={this.props.editCallback} /> ); } if (c.id === 2 && credit < 71) { console.log("--course 2 " + c.course); rows.push( <CourseRow course={c} key={c.id} editCallback={this.props.editCallback} /> ); } if (c.id === 3 && credit > 70){ console.log("--course 3 " + c.course); rows.push( <CourseRow course={c} key={c.id} editCallback={this.props.editCallback} /> ) } }) // 补上漏写的forEach闭合右括号,就是这个漏写直接触发了当前报错
内容的提问来源于stack exchange,提问作者JS1
相关产品推荐
相关产品推荐

