如何使用babel在单独的jsx文件中转换嵌套组件?

时间:2015-11-04 05:07:07

标签: reactjs babeljs react-jsx

我还没有在几个月内使用React,今晚我试图编写jsx,由babel根据these directions自动编译为jsx。

我有两个这样的文件:

Parent.jsx

<TileContainer id="container" tileDelete="handleTileDelete" tiles="{/TileCollection}">
            <StandardTile 
                icon = "sap-icon://{icon}"      
                type = "Monitor"
                press = "FunctionPress"
                title = "{title}" />
        </TileContainer>

Child.jsx

var Parent = React.createClass({
  render: function() {
    return (<Child></Child>);
  }
});

我正在使用babel监视文件的更改并在需要时输出新的js文件,它总是将Child组件呈现为var Child= React.createClass({ render: function() { return (<span>CHILD</span>); } }); ,而不是像我期望的那样呈现React.createElement("Child", null)

我对babel和节点一般是新手,并且无法找到让jsx变换按预期工作的方法。有什么我想念的吗?我觉得这种模式曾经起作用,但我以前从未尝试过像babel这样的东西。

1 个答案:

答案 0 :(得分:0)

这使我永远感到不解,但事实证明,您可以只从HTML加载所有文件,然后将它们嵌套。

HTML:

<html lang="en">
<head>
    <script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script>
    <script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.23/browser.js"></script>
</head>

<body>
    <div id="root"></div>
    <div id="test"></div>
</body>

<script src="./Test3a.jsx" type="text/babel"></script>
<script src="./Test3b.jsx" type="text/babel"></script>
<script type="text/babel">
    ReactDOM.render(<Ostrich />, document.getElementById("root"));
</script>
<script type="text/babel">
    ReactDOM.render(<Monkey />, document.getElementById("test"));
</script>

Test3A.jsx:

window.Ostrich = function() {
    return (
        <div>
            Ostriches
        </div>
    );
}

window.Monkey = function(){ 返回( ); }

Test3A.jsx:

window.MoreMonkeys = function() {
    return (
        <div>
            That's a lot of Monkeys.
        </div>
    );
}

这是针对非webpack的“ React JS”,或更确切地说是针对“不含” ReactJS的Babel / JSX。这可能不是一个完美的解决方案,但希望能有所帮助。