← all conversations

JSX Unterminated Error Fix

2025-06-012 turns8,762 charsgpt-4-1-mini
jsx-syntaxvite-build-errorreact-component

Summary

User encountered an unterminated JSX contents error in a React component while using Vite and needed help fixing the syntax issue.

Messages

[plugin:vite:react-babel] /Users/danielkliewer/obj01/frontend/src/components/SummaryCard.tsx: Unterminated JSX contents. (140:14) 143 | }; /Users/danielkliewer/obj01/frontend/src/components/SummaryCard.tsx:140:14 138| opacity-0 group-hover:opacity-100 139| transition-opacity duration-500 blur-sm -z-10" /> 140| </article> | ^ 141| 142| ); at constructor (/Users/danielkliewer/obj01/frontend/node_modules/@babel/parser/lib/index.js:363:19) at TypeScriptParserMixin.raise (/Users/danielkliewer/obj01/frontend/node_modules/@babel/parser/lib/index.js:6609:19) at TypeScriptParserMixin.jsxReadToken (/Users/danielkliewer/obj01/frontend/node_modules/@babel/parser/lib/index.js:4460:20) at TypeScriptParserMixin.getTokenFromCode (/Users/danielkliewer/obj01/frontend/node_modules/@babel/parser/lib/index.js:4786:12) at TypeScriptParserMixin.getTokenFromCode (/Users/danielkliewer/obj01/frontend/node_modules/@babel/parser/lib/index.js:9930:11) at TypeScriptParserMixin.nextToken (/Users/danielkliewer/obj01/frontend/node_modules/@babel/parser/lib/index.js:5792:10) at TypeScriptParserMixin.next (/Users/danielkliewer/obj01/frontend/node_modules/@babel/parser/lib/index.js:5702:10) at TypeScriptParserMixin.eat (/Users/danielkliewer/obj01/frontend/node_modules/@babel/parser/lib/index.js:5706:12) at TypeScriptParserMixin.expect (/Users/danielkliewer/obj01/frontend/node_modules/@babel/parser/lib/index.js:6909:15) at TypeScriptParserMixin.jsxParseClosingElementAt (/Users/danielkliewer/obj01/frontend/node_modules/@babel/parser/lib/index.js:4692:10) at TypeScriptParserMixin.jsxParseElementAt (/Users/danielkliewer/obj01/frontend/node_modules/@babel/parser/lib/index.js:4707:37) at TypeScriptParserMixin.jsxParseElementAt (/Users/danielkliewer/obj01/frontend/node_modules/@babel/parser/lib/index.js:4710:32) at TypeScriptParserMixin.jsxParseElement (/Users/danielkliewer/obj01/frontend/node_modules/@babel/parser/lib/index.js:4761:17) at TypeScriptParserMixin.parseExprAtom (/Users/danielkliewer/obj01/frontend/node_modules/@babel/parser/lib/index.js:4771:19) at TypeScriptParserMixin.parseExprSubscripts (/Users/danielkliewer/obj01/frontend/node_modules/@babel/parser/lib/index.js:10996:23) at TypeScriptParserMixin.parseUpdate (/Users/danielkliewer/obj01/frontend/node_modules/@babel/parser/lib/index.js:10981:21) at TypeScriptParserMixin.parseMaybeUnary (/Users/danielkliewer/obj01/frontend/node_modules/@babel/parser/lib/index.js:10961:23) at TypeScriptParserMixin.parseMaybeUnary (/Users/danielkliewer/obj01/frontend/node_modules/@babel/parser/lib/index.js:9778:18) at TypeScriptParserMixin.parseMaybeUnaryOrPrivate (/Users/danielkliewer/obj01/frontend/node_modules/@babel/parser/lib/index.js:10814:61) at TypeScriptParserMixin.parseExprOps (/Users/danielkliewer/obj01/frontend/node_modules/@babel/parser/lib/index.js:10819:23) at TypeScriptParserMixin.parseMaybeConditional (/Users/danielkliewer/obj01/frontend/node_modules/@babel/parser/lib/index.js:10796:23) at TypeScriptParserMixin.parseMaybeAssign (/Users/danielkliewer/obj01/frontend/node_modules/@babel/parser/lib/index.js:10749:21) at /Users/danielkliewer/obj01/frontend/node_modules/@babel/parser/lib/index.js:9716:39 at TypeScriptParserMixin.tryParse (/Users/danielkliewer/obj01/frontend/node_modules/@babel/parser/lib/index.js:6918:20) at TypeScriptParserMixin.parseMaybeAssign (/Users/danielkliewer/obj01/frontend/node_modules/@babel/parser/lib/index.js:9716:18) at /Users/danielkliewer/obj01/frontend/node_modules/@babel/parser/lib/index.js:10718:39 at TypeScriptParserMixin.allowInAnd (/Users/danielkliewer/obj01/frontend/node_modules/@babel/parser/lib/index.js:12345:12) at TypeScriptParserMixin.parseMaybeAssignAllowIn (/Users/danielkliewer/obj01/frontend/node_modules/@babel/parser/lib/index.js:10718:17) at TypeScriptParserMixin.parseParenAndDistinguishExpression (/Users/danielkliewer/obj01/frontend/node_modules/@babel/parser/lib/index.js:11592:28) at TypeScriptParserMixin.parseExprAtom (/Users/danielkliewer/obj01/frontend/node_modules/@babel/parser/lib/index.js:11246:23) at TypeScriptParserMixin.parseExprAtom (/Users/danielkliewer/obj01/frontend/node_modules/@babel/parser/lib/index.js:4776:20) at TypeScriptParserMixin.parseExprSubscripts (/Users/danielkliewer/obj01/frontend/node_modules/@babel/parser/lib/index.js:10996:23) at TypeScriptParserMixin.parseUpdate (/Users/danielkliewer/obj01/frontend/node_modules/@babel/parser/lib/index.js:10981:21) at TypeScriptParserMixin.parseMaybeUnary (/Users/danielkliewer/obj01/frontend/node_modules/@babel/parser/lib/index.js:10961:23) at TypeScriptParserMixin.parseMaybeUnary (/Users/danielkliewer/obj01/frontend/node_modules/@babel/parser/lib/index.js:9778:18) at TypeScriptParserMixin.parseMaybeUnaryOrPrivate (/Users/danielkliewer/obj01/frontend/node_modules/@babel/parser/lib/index.js:10814:61) at TypeScriptParserMixin.parseExprOps (/Users/danielkliewer/obj01/frontend/node_modules/@babel/parser/lib/index.js:10819:23) at TypeScriptParserMixin.parseMaybeConditional (/Users/danielkliewer/obj01/frontend/node_modules/@babel/parser/lib/index.js:10796:23) at TypeScriptParserMixin.parseMaybeAssign (/Users/danielkliewer/obj01/frontend/node_modules/@babel/parser/lib/index.js:10749:21) at TypeScriptParserMixin.parseMaybeAssign (/Users/danielkliewer/obj01/frontend/node_modules/@babel/parser/lib/index.js:9727:20) at TypeScriptParserMixin.parseExpressionBase (/Users/danielkliewer/obj01/frontend/node_modules/@babel/parser/lib/index.js:10702:23) at /Users/danielkliewer/obj01/frontend/node_modules/@babel/parser/lib/index.js:10698:39 at TypeScriptParserMixin.allowInAnd (/Users/danielkliewer/obj01/frontend/node_modules/@babel/parser/lib/index.js:12340:16) at TypeScriptParserMixin.parseExpression (/Users/danielkliewer/obj01/frontend/node_modules/@babel/parser/lib/index.js:10698:17) at TypeScriptParserMixin.parseReturnStatement (/Users/danielkliewer/obj01/frontend/node_modules/@babel/parser/lib/index.js:13034:28) at TypeScriptParserMixin.parseStatementContent (/Users/danielkliewer/obj01/frontend/node_modules/@babel/parser/lib/index.js:12689:21) at TypeScriptParserMixin.parseStatementContent (/Users/danielkliewer/obj01/frontend/node_modules/@babel/parser/lib/index.js:9453:18) at TypeScriptParserMixin.parseStatementLike (/Users/danielkliewer/obj01/frontend/node_modules/@babel/parser/lib/index.js:12658:17) at TypeScriptParserMixin.parseStatementListItem (/Users/danielkliewer/obj01/frontend/node_modules/@babel/parser/lib/index.js:12638:17) at TypeScriptParserMixin.parseBlockOrModuleBlockBody (/Users/danielkliewer/obj01/frontend/node_modules/@babel/parser/lib/index.js:13208:61 Click outside, press Esc key, or fix the code to dismiss. You can also disable this overlay by setting server.hmr.overlay to false in vite.config.ts.
The error `Unterminated JSX contents` typically means that somewhere in your JSX code you have a tag or content that is not properly closed or there's a syntax issue inside the JSX block. The error points to line 140, column 14 in `SummaryCard.tsx` at the closing `</article>` tag, suggesting something inside the `<article>` JSX element was not properly closed or structured. ### What to do 1. **Check JSX elements inside the `<article>` block.** Make sure every opening tag has a matching closing tag or is self-closing (`<img />`, `<input />`, etc.). 2. **Look for dangling braces or strings.** For example, unclosed `{` or missing `}` in expressions like `{ someVariable }` or JSX props. 3. **Check multiline JSX comments** Comments inside JSX must use `{/* comment */}` syntax, not `//` or `/* */` directly. --- ### Example of common JSX mistakes causing this: ```tsx return ( <article className="something"> <div>Some content <img src="..." /> // This is fine because it's self-closed </article> // But the div is not closed here => error ); ``` Should be: ```tsx return ( <article className="something"> <div>Some content</div> <img src="..." /> </article> ); ``` --- ### Could you share the relevant snippet around lines 130-145 in `SummaryCard.tsx`? If you want, you can paste that here and I can help spot the missing closing tag or syntax error directly. --- ### Meanwhile, some quick steps: - Make sure all tags inside `<article>` are closed. - Make sure your JSX expressions have matching braces. - Check for stray characters or incomplete tags. --- If you want, I can help you write a quick check script or format the JSX for you if you share the snippet!
gpt-4-1-mini