From 424a59a8565b833294bb8ff1680cc49dd5860d7d Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Wed, 1 Apr 2015 14:07:26 +1100 Subject: [PATCH] dont coerce jsx expression containers - fixes #1126 --- .../transformation/helpers/build-react-transformer.js | 6 +++++- src/babel/transformation/helpers/react.js | 6 +++--- .../react/dont-coerce-expression-containers/actual.js | 4 ++++ .../react/dont-coerce-expression-containers/expected.js | 9 +++++++++ 4 files changed, 21 insertions(+), 4 deletions(-) create mode 100644 test/core/fixtures/transformation/react/dont-coerce-expression-containers/actual.js create mode 100644 test/core/fixtures/transformation/react/dont-coerce-expression-containers/expected.js diff --git a/src/babel/transformation/helpers/build-react-transformer.js b/src/babel/transformation/helpers/build-react-transformer.js index 1d2653cddd..ce1f7150fa 100644 --- a/src/babel/transformation/helpers/build-react-transformer.js +++ b/src/babel/transformation/helpers/build-react-transformer.js @@ -144,10 +144,14 @@ export default function (exports, opts) { }; exports.JSXElement = { + enter(node) { + node.children = react.buildChildren(node); + }, + exit(node) { var callExpr = node.openingElement; - callExpr.arguments = callExpr.arguments.concat(react.buildChildren(node)); + callExpr.arguments = callExpr.arguments.concat(node.children); if (callExpr.arguments.length >= 3) { callExpr._prettyCall = true; diff --git a/src/babel/transformation/helpers/react.js b/src/babel/transformation/helpers/react.js index eff3af5869..74a4705320 100644 --- a/src/babel/transformation/helpers/react.js +++ b/src/babel/transformation/helpers/react.js @@ -81,15 +81,15 @@ export function buildChildren(node) { for (var i = 0; i < node.children.length; i++) { var child = node.children[i]; - if (t.isJSXExpressionContainer(child)) child = child.expression; if (t.isLiteral(child) && typeof child.value === "string") { cleanJSXElementLiteralChild(child, elems); continue; - } else if (t.isJSXEmptyExpression(child)) { - continue; } + if (t.isJSXExpressionContainer(child)) child = child.expression; + if (t.isJSXEmptyExpression(child)) continue; + elems.push(child); } diff --git a/test/core/fixtures/transformation/react/dont-coerce-expression-containers/actual.js b/test/core/fixtures/transformation/react/dont-coerce-expression-containers/actual.js new file mode 100644 index 0000000000..c8da550222 --- /dev/null +++ b/test/core/fixtures/transformation/react/dont-coerce-expression-containers/actual.js @@ -0,0 +1,4 @@ + + To get started, edit index.ios.js!!!{"\n"} + Press Cmd+R to reload + diff --git a/test/core/fixtures/transformation/react/dont-coerce-expression-containers/expected.js b/test/core/fixtures/transformation/react/dont-coerce-expression-containers/expected.js new file mode 100644 index 0000000000..7d39c56fcf --- /dev/null +++ b/test/core/fixtures/transformation/react/dont-coerce-expression-containers/expected.js @@ -0,0 +1,9 @@ +"use strict"; + +React.createElement( + Text, + null, + "To get started, edit index.ios.js!!!", + "\n", + "Press Cmd+R to reload" +);