在 CSHTML 中渲染转译的 ES6

Render Transpiled ES6 in CSHTML

我有

Tutorial.jsx

class ShoppingList extends React.Component {
    render() {
        return (<div>Milk</div>);
    }
}

export default ShoppingList;

webpack.config.js

module.exports = {
    ...
    output: './React/bundle.js',
    ...,
    module: {
        loaders: [
            {
                test: /\.jsx?$/,
                exclude: /node_modules/,
                loader: "babel-loader",
                query: {                        
                    presets: ['es2015', 'react'],
                }
            }
        ]
    }
}

在我的 CMD 提示符下,当我 运行 webpack -w 一切都是绿色时,我看到我的 bundle.js 文件出现在它应该出现的位置,在 React 文件夹中。打开它,我看到

...
var ShoppingList = function (_React$Component) {
    ...
}
...

所以看起来一切都很好。

现在我想在我的 _Layout.cshtml 文件中呈现 ShoppingList。

问题:我该怎么做?我已经尝试了下面的所有方法,并且总是收到有关无效参数类型、传入错误元素或其他任何内容的 React 错误。我的CSHTML在下面

<div id="content1">render here</div>
....
<script src="~/React/bundle.js"></script>
<script>
    ReactDOM.render("ShoppingList", document.getElementById("content1"));
    ReactDOM.render(ShoppingList, document.getElementById("content1"));
    ReactDOM.render(<ShoppingList />, document.getElementById("content1"));
</script>

有人可以告诉我

  1. JSX 文件中可能没有 ReactDOM.render() 并且,
  2. 可以做我想做的事情,即在 CS 中呈现我的购物列表HTML

到目前为止,我得到的最佳结果是在我的 DOM 资源管理器中看到了 ShoppingList,但实际上并没有呈现 HTML。结果 <shoppinglist ...></shoppinglist> 对我来说似乎是错误的。

谢谢。

你的条目文件中应该有这个:

import ShoppingList from 'path-to/ShoppingList';

ReactDOM.render(<ShoppingList />, document.getElementById("content1"));

在 CSHTML 页面中不需要额外的脚本标记。


您的原始示例不起作用,因为:

  1. ShoppingList 未在全局公开(导出为默认值不会使其成为全局)。
  2. JSX 语法 (<ShoppingList />) 需要转译后才能在 HTML 页面中使用。

如果您确实需要在 CSHTML 页面中使用某个组件,您可以将该组件设为全局:

window.ShoppingList = ShoppingList

在定义组件的文件中。

并使用 vanilla javascript 而不是 JSX 语法:

ReactDOM.render(React.createElement(ShoppingList), document.getElementById("content1"))