Keywords: ReactJS | JSX Syntax Error | Cross-Origin Request | Babel Transformation | Local Server
Abstract: This article provides an in-depth exploration of the common "Uncaught SyntaxError: Unexpected token <" error in ReactJS development. Starting from the JSX syntax parsing mechanism, it thoroughly analyzes the root causes of the error. By comparing different solution approaches, it focuses on the correct configuration method using text/babel script tags and offers comprehensive guidance for local server deployment, helping developers completely resolve cross-origin request and JSX compilation issues.
Problem Background and Error Analysis
During ReactJS development, when separating JavaScript code into external files, developers frequently encounter the "Uncaught SyntaxError: Unexpected token <" error. The essence of this error is the browser's inability to properly parse JSX syntax, since JSX is not standard JavaScript syntax and requires transformation before browser execution.
JSX Syntax Parsing Mechanism
JSX is a React-specific syntax extension that allows writing HTML-like markup directly within JavaScript code. In development environments, there are typically two approaches to handle JSX:
Browser-side transformation: Using JSXTransformer or Babel's browser version to transform JSX code in real-time during page loading. This approach is suitable for development and debugging but not recommended for production environments.
Pre-compilation transformation: Using build tools (such as Webpack, Browserify) to convert JSX into standard JavaScript code before deployment. This method offers better performance and is ideal for production environments.
Deep Root Cause Analysis
The issue in the original code lies in the script tag missing proper type declaration. When browsers encounter JavaScript files containing JSX syntax without correct type specification, they parse it as regular JavaScript and throw syntax errors upon encountering "<" symbols.
The correct configuration should be:
<script type="text/babel" src="./lander.js"></script>
Or using the older JSX transformer:
<script type="text/jsx" src="./lander.js"></script>
Cross-Origin Request Solution
When accessing local files using the file protocol (file://), browsers block cross-origin requests due to security considerations. This explains why the "XMLHttpRequest cannot load file://..." error occurs.
The solution involves using a local server to host files:
Using Python's built-in server:
python -m http.server 8000
Using Node.js http-server:
npm install -g http-server
http-server -p 8080
Using integrated environments like MAMP/WAMP: These tools provide complete local server environments including Apache, MySQL, and PHP support.
Code Examples and Best Practices
Below is the complete corrected example code:
HTML file:
<html>
<head>
<title>Page</title>
<script src="https://unpkg.com/react@17/umd/react.development.js"></script>
<script src="https://unpkg.com/react-dom@17/umd/react-dom.development.js"></script>
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
<script type="text/babel" src="./lander.js"></script>
</head>
<body>
<div id="content"></div>
</body>
</html>
JavaScript file (lander.js):
const Lander = () => {
const info = "Lorem ipsum dolor sit amet... ";
return (
<div>
<div className="info">{info}</div>
</div>
);
};
ReactDOM.render(<Lander />, document.getElementById('content'));
Production Environment Optimization
While browser-side transformation is suitable for development, production environments should use pre-compilation:
Install Babel and related presets:
npm install --save-dev @babel/core @babel/preset-react
Configure Babel transformation:
// .babelrc
{
"presets": ["@babel/preset-react"]
}
Use build tools for bundling: Tools like Webpack, Parcel, or Rollup can automate JSX transformation and code optimization.
Related Error Pattern Extension
Similar syntax errors include "Uncaught SyntaxError: Unexpected token export," which typically occurs when trying to use export statements directly in environments that don't support ES6 modules. The solution is similar: either configure the correct build environment or use compatible module systems.
Conclusion
Resolving syntax errors in ReactJS requires understanding how JSX works and browser parsing mechanisms. By properly configuring script types, using local servers, and adopting appropriate build strategies, developers can completely avoid such issues, improving development efficiency and application performance.