mirror of
https://github.com/facebook/react.git
synced 2025-11-01 09:12:30 +00:00
[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:
+58
@@ -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;
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
+16
@@ -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",
|
||||
|
||||
Reference in New Issue
Block a user