diff --git a/compiler/packages/babel-plugin-react-compiler/src/Optimization/InlineJsxTransform.ts b/compiler/packages/babel-plugin-react-compiler/src/Optimization/InlineJsxTransform.ts
index 396e6ad1be..89efa78469 100644
--- a/compiler/packages/babel-plugin-react-compiler/src/Optimization/InlineJsxTransform.ts
+++ b/compiler/packages/babel-plugin-react-compiler/src/Optimization/InlineJsxTransform.ts
@@ -405,6 +405,17 @@ export function inlineJsxTransform(
nextInstructions.push(reactElementInstruction);
break;
}
+ case 'FunctionExpression':
+ case 'ObjectMethod': {
+ inlineJsxTransform(
+ instr.value.loweredFunc.func,
+ inlineJsxTransformConfig,
+ );
+ if (nextInstructions !== null) {
+ nextInstructions.push(instr);
+ }
+ break;
+ }
default: {
if (nextInstructions !== null) {
nextInstructions.push(instr);
diff --git a/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/inline-jsx-transform.expect.md b/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/inline-jsx-transform.expect.md
index 6dd899d5c7..2078575e83 100644
--- a/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/inline-jsx-transform.expect.md
+++ b/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/inline-jsx-transform.expect.md
@@ -26,11 +26,15 @@ function ParentAndRefAndKey(props) {
}
function ParentAndChildren(props) {
+ const render = () => {
+ return
{props.foo}
;
+ };
return (
-
+
+ {render()}
);
@@ -40,8 +44,8 @@ const propsToSpread = {a: 'a', b: 'b', c: 'c'};
function PropsSpread() {
return (
<>
-
-
+
+
>
);
}
@@ -151,37 +155,30 @@ function ParentAndRefAndKey(props) {
}
function ParentAndChildren(props) {
- const $ = _c2(7);
+ const $ = _c2(14);
let t0;
- if ($[0] !== props) {
- t0 = {
+ if ($[0] !== props.foo) {
+ t0 = () => ({
$$typeof: Symbol.for("react.transitional.element"),
- type: Child,
+ type: "div",
ref: null,
- key: "a",
- props: props,
- };
- $[0] = props;
+ key: "d",
+ props: { children: props.foo },
+ });
+ $[0] = props.foo;
$[1] = t0;
} else {
t0 = $[1];
}
+ const render = t0;
let t1;
if ($[2] !== props) {
t1 = {
$$typeof: Symbol.for("react.transitional.element"),
type: Child,
ref: null,
- key: "b",
- props: {
- children: {
- $$typeof: Symbol.for("react.transitional.element"),
- type: GrandChild,
- ref: null,
- key: null,
- props: { className: props.foo, ...props },
- },
- },
+ key: "a",
+ props: props,
};
$[2] = props;
$[3] = t1;
@@ -189,21 +186,58 @@ function ParentAndChildren(props) {
t1 = $[3];
}
let t2;
- if ($[4] !== t0 || $[5] !== t1) {
+ if ($[4] !== props) {
t2 = {
+ $$typeof: Symbol.for("react.transitional.element"),
+ type: GrandChild,
+ ref: null,
+ key: "c",
+ props: { className: props.foo, ...props },
+ };
+ $[4] = props;
+ $[5] = t2;
+ } else {
+ t2 = $[5];
+ }
+ let t3;
+ if ($[6] !== render) {
+ t3 = render();
+ $[6] = render;
+ $[7] = t3;
+ } else {
+ t3 = $[7];
+ }
+ let t4;
+ if ($[8] !== t2 || $[9] !== t3) {
+ t4 = {
+ $$typeof: Symbol.for("react.transitional.element"),
+ type: Child,
+ ref: null,
+ key: "b",
+ props: { children: [t2, t3] },
+ };
+ $[8] = t2;
+ $[9] = t3;
+ $[10] = t4;
+ } else {
+ t4 = $[10];
+ }
+ let t5;
+ if ($[11] !== t1 || $[12] !== t4) {
+ t5 = {
$$typeof: Symbol.for("react.transitional.element"),
type: Parent,
ref: null,
key: null,
- props: { children: [t0, t1] },
+ props: { children: [t1, t4] },
};
- $[4] = t0;
- $[5] = t1;
- $[6] = t2;
+ $[11] = t1;
+ $[12] = t4;
+ $[13] = t5;
} else {
- t2 = $[6];
+ t5 = $[13];
}
- return t2;
+ return t5;
}
const propsToSpread = { a: "a", b: "b", c: "c" };
@@ -222,14 +256,14 @@ function PropsSpread() {
$$typeof: Symbol.for("react.transitional.element"),
type: Test,
ref: null,
- key: null,
+ key: "a",
props: propsToSpread,
},
{
$$typeof: Symbol.for("react.transitional.element"),
type: Test,
ref: null,
- key: null,
+ key: "b",
props: { ...propsToSpread, a: "z" },
},
],
@@ -250,4 +284,4 @@ export const FIXTURE_ENTRYPOINT = {
```
### Eval output
-(kind: ok) Hello world
\ No newline at end of file
+(kind: ok)
\ No newline at end of file
diff --git a/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/inline-jsx-transform.js b/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/inline-jsx-transform.js
index 4a9d53b6f4..6fe9553dcd 100644
--- a/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/inline-jsx-transform.js
+++ b/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/inline-jsx-transform.js
@@ -22,11 +22,15 @@ function ParentAndRefAndKey(props) {
}
function ParentAndChildren(props) {
+ const render = () => {
+ return {props.foo}
;
+ };
return (
-
+
+ {render()}
);
@@ -36,8 +40,8 @@ const propsToSpread = {a: 'a', b: 'b', c: 'c'};
function PropsSpread() {
return (
<>
-
-
+
+
>
);
}