---
title: unsupported-syntax
---
Validates against syntax that React Compiler does not support. If you need to, you can still use this syntax outside of React, such as in a standalone utility function.
## Rule Details {/*rule-details*/}
React Compiler needs to statically analyze your code to apply optimizations. Features like `eval` and `with` make it impossible to statically understand what the code does at compile time, so the compiler can't optimize components that use them.
### Invalid {/*invalid*/}
Examples of incorrect code for this rule:
```js
// ❌ Using eval in component
function Component({ code }) {
const result = eval(code); // Can't be analyzed
return
{result}
;
}
// ❌ Using with statement
function Component() {
with (Math) { // Changes scope dynamically
return
{sin(PI / 2)}
;
}
}
// ❌ Dynamic property access with eval
function Component({propName}) {
const value = eval(`props.${propName}`);
return
{value}
;
}
```
### Valid {/*valid*/}
Examples of correct code for this rule:
```js
// ✅ Use normal property access
function Component({propName, props}) {
const value = props[propName]; // Analyzable
return
{value}
;
}
// ✅ Use standard Math methods
function Component() {
return
{Math.sin(Math.PI / 2)}
;
}
```
## Troubleshooting {/*troubleshooting*/}
### I need to evaluate dynamic code {/*evaluate-dynamic-code*/}
You might need to evaluate user-provided code:
```js {expectedErrors: {'react-compiler': [3]}}
// ❌ Wrong: eval in component
function Calculator({expression}) {
const result = eval(expression); // Unsafe and unoptimizable
return
Result: {result}
;
}
```
Use a safe expression parser instead:
```js
// ✅ Better: Use a safe parser
import {evaluate} from 'mathjs'; // or similar library
function Calculator({expression}) {
const [result, setResult] = useState(null);
const calculate = () => {
try {
// Safe mathematical expression evaluation
setResult(evaluate(expression));
} catch (error) {
setResult('Invalid expression');
}
};
return (
{result &&
Result: {result}
}
);
}
```
Never use `eval` with user input - it's a security risk. Use dedicated parsing libraries for specific use cases like mathematical expressions, JSON parsing, or template evaluation.