Linter · Rules
react-hooks/unsupported-syntax
Disallow syntax that the React Compiler cannot compile, such as eval()
The React Compiler needs to know everything a component reads and writes. eval() runs code it can't see, so it skips the whole component. The component still works, but it gets no automatic memoization.
The rule only looks at components and hooks, including the functions nested in them.
Configure
Off by default. To turn it on:
bunfig.toml
[lint.rules]
"react-hooks/unsupported-syntax" = "error" # or "warn"
Examples
Reported:
function Calculator({ formula }) {
const result = eval(formula);
return <output>{result}</output>;
}
function Calculator({ formula, onResult }) {
return <button onClick={() => onResult(eval(formula))}>Run</button>;
}
Not reported:
function Calculator({ formula }) {
const result = evaluate(parse(formula));
return <output>{result}</output>;
}
This function is neither a component nor a hook, so the compiler never sees it:
function run(formula) {
return eval(formula);
}
When not to use it
If you don't use the React Compiler, a skipped component costs you nothing.