diff --git a/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/unmemoized-nonreactive-dependency-is-pruned-as-dependency.expect.md b/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/unmemoized-nonreactive-dependency-is-pruned-as-dependency.expect.md new file mode 100644 index 0000000000..221790fc43 --- /dev/null +++ b/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/unmemoized-nonreactive-dependency-is-pruned-as-dependency.expect.md @@ -0,0 +1,55 @@ + +## Input + +```javascript +import { mutate, useNoAlias } from "shared-runtime"; + +function Component(props) { + // Here `x` cannot be memoized bc its mutable range spans a hook call: + const x = []; + useNoAlias(); + mutate(x); + + // However, `x` is non-reactive. It cannot semantically change, so we + // exclude it as a dependency of the JSX element: + return
{x}
; +} + +export const FIXTURE_ENTRYPOINT = { + fn: Component, + params: [{ value: 42 }], +}; + +``` + +## Code + +```javascript +import { unstable_useMemoCache as useMemoCache } from "react"; +import { mutate, useNoAlias } from "shared-runtime"; + +function Component(props) { + const $ = useMemoCache(1); + + const x = []; + useNoAlias(); + mutate(x); + let t0; + if ($[0] === Symbol.for("react.memo_cache_sentinel")) { + t0 =
{x}
; + $[0] = t0; + } else { + t0 = $[0]; + } + return t0; +} + +export const FIXTURE_ENTRYPOINT = { + fn: Component, + params: [{ value: 42 }], +}; + +``` + +### Eval output +(kind: ok)
\ No newline at end of file diff --git a/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/unmemoized-nonreactive-dependency-is-pruned-as-dependency.js b/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/unmemoized-nonreactive-dependency-is-pruned-as-dependency.js new file mode 100644 index 0000000000..d2d39122a8 --- /dev/null +++ b/compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/unmemoized-nonreactive-dependency-is-pruned-as-dependency.js @@ -0,0 +1,17 @@ +import { mutate, useNoAlias } from "shared-runtime"; + +function Component(props) { + // Here `x` cannot be memoized bc its mutable range spans a hook call: + const x = []; + useNoAlias(); + mutate(x); + + // However, `x` is non-reactive. It cannot semantically change, so we + // exclude it as a dependency of the JSX element: + return
{x}
; +} + +export const FIXTURE_ENTRYPOINT = { + fn: Component, + params: [{ value: 42 }], +};