From 7d4ecea8fb4a2bd7c434c4b79d601475ae76197c Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Mon, 20 Apr 2015 05:49:59 +0100 Subject: [PATCH] move react children coercion to opening element visitor - fixes #1276 --- .../helpers/build-react-transformer.js | 6 ++---- src/babel/transformation/helpers/react.js | 5 ++--- .../actual.js | 11 +++++++++++ .../expected.js | 18 ++++++++++++++++++ 4 files changed, 33 insertions(+), 7 deletions(-) create mode 100644 test/core/fixtures/transformation/react/should-handle-attributed-elements/actual.js create mode 100644 test/core/fixtures/transformation/react/should-handle-attributed-elements/expected.js diff --git a/src/babel/transformation/helpers/build-react-transformer.js b/src/babel/transformation/helpers/build-react-transformer.js index b8c0e9a79d..e21b54e390 100644 --- a/src/babel/transformation/helpers/build-react-transformer.js +++ b/src/babel/transformation/helpers/build-react-transformer.js @@ -57,6 +57,8 @@ export default function (exports, opts) { exports.JSXOpeningElement = { exit(node, parent, scope, file) { + parent.children = react.buildChildren(parent); + var tagExpr = node.name; var args = []; @@ -144,10 +146,6 @@ export default function (exports, opts) { }; exports.JSXElement = { - enter(node) { - node.children = react.buildChildren(node); - }, - exit(node) { var callExpr = node.openingElement; diff --git a/src/babel/transformation/helpers/react.js b/src/babel/transformation/helpers/react.js index 74a4705320..5e0e824d18 100644 --- a/src/babel/transformation/helpers/react.js +++ b/src/babel/transformation/helpers/react.js @@ -34,9 +34,8 @@ function cleanJSXElementLiteralChild(child, args) { var lines = child.value.split(/\r\n|\n|\r/); var lastNonEmptyLine = 0; - var i; - for (i = 0; i < lines.length; i++) { + for (let i = 0; i < lines.length; i++) { if (lines[i].match(/[^ \t]/)) { lastNonEmptyLine = i; } @@ -44,7 +43,7 @@ function cleanJSXElementLiteralChild(child, args) { var str = ""; - for (i = 0; i < lines.length; i++) { + for (let i = 0; i < lines.length; i++) { var line = lines[i]; var isFirstLine = i === 0; diff --git a/test/core/fixtures/transformation/react/should-handle-attributed-elements/actual.js b/test/core/fixtures/transformation/react/should-handle-attributed-elements/actual.js new file mode 100644 index 0000000000..e179659161 --- /dev/null +++ b/test/core/fixtures/transformation/react/should-handle-attributed-elements/actual.js @@ -0,0 +1,11 @@ +var HelloMessage = React.createClass({ + render: function() { + return
Hello {this.props.name}
; + } +}); + +React.render( + Sebastian + +} />, mountNode); diff --git a/test/core/fixtures/transformation/react/should-handle-attributed-elements/expected.js b/test/core/fixtures/transformation/react/should-handle-attributed-elements/expected.js new file mode 100644 index 0000000000..7b386d4a3e --- /dev/null +++ b/test/core/fixtures/transformation/react/should-handle-attributed-elements/expected.js @@ -0,0 +1,18 @@ +var HelloMessage = React.createClass({ + displayName: "HelloMessage", + + render: function render() { + return React.createElement( + "div", + null, + "Hello ", + this.props.name + ); + } +}); + +React.render(React.createElement(HelloMessage, { name: React.createElement( + "span", + null, + "Sebastian" + ) }), mountNode);