[compiler] Add todo fixtures for local reassignment in an async callback

ghstack-source-id: eca878f62a
Pull Request resolved: https://github.com/facebook/react/pull/30109
This commit is contained in:
Joe Savona
2024-06-26 16:51:15 -07:00
parent 4c9a2d2ddf
commit 00775d94dc
3 changed files with 75 additions and 0 deletions
@@ -0,0 +1,58 @@
## Input
```javascript
function Component() {
let value = null;
const reassign = async () => {
await foo().then((result) => {
// Reassigning a local variable in an async function is *always* mutating
// after render, so this should error regardless of where this ends up
// getting called
value = result;
});
};
const onClick = async () => {
await reassign();
};
return <div onClick={onClick}>Click</div>;
}
```
## Code
```javascript
import { c as _c } from "react/compiler-runtime";
function Component() {
const $ = _c(2);
let value;
if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
value = null;
$[0] = value;
} else {
value = $[0];
}
let t0;
if ($[1] === Symbol.for("react.memo_cache_sentinel")) {
const reassign = async () => {
await foo().then((result) => {
value = result;
});
};
const onClick = async () => {
await reassign();
};
t0 = <div onClick={onClick}>Click</div>;
$[1] = t0;
} else {
t0 = $[1];
}
return t0;
}
```
@@ -0,0 +1,16 @@
function Component() {
let value = null;
const reassign = async () => {
await foo().then((result) => {
// Reassigning a local variable in an async function is *always* mutating
// after render, so this should error regardless of where this ends up
// getting called
value = result;
});
};
const onClick = async () => {
await reassign();
};
return <div onClick={onClick}>Click</div>;
}
@@ -487,6 +487,7 @@ const skipFilter = new Set([
"todo.invalid-reassign-local-variable-in-jsx-callback",
"todo.invalid-reassign-local-variable-in-hook-argument",
"todo.invalid-reassign-local-variable-in-effect",
"todo.invalid-reassign-local-variable-in-async-callback",
// bugs
"bug-invalid-hoisting-functionexpr",