我最近开始研究React.js。 从我看过的教程中,使用了JSX。但是,当我转到React.js指南时,他们使用Babel,他们说如果你想使用JSX,请使用Browser.js。 我还没有完全理解如何使用bable或JSX。
以下是我的index.html页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-alpha/css/bootstrap.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.0.0-alpha1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.14.3/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.14.3/react-dom.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.24/browser.min.js"></script>
</head>
<body>
<div id="content"></div>
<script type="text/babel" src="RadioOption.js"></script>
<script type="text/babel" src="Demo.js"></script>
</body>
</html>
我创建了2个babel类型的脚本。 RadioOption.js定义了一个名为RadioOption的React组件。我试图在Demo.js文件中使用此组件。在Demo.js文件中,我尝试定义一个名为Demo的React组件,它包含一个RadioOption组件。然而,浏览器说RadioOption没有定义,也没有在浏览器中显示任何内容。
- RadioOption.js -
var RadioOption = React.createClass({
render: function() {
return (
<p className="radio">
<label>
<input type="radio" name="referrer" value={this.props.value} />
{this.props.children}
</label>
</p>
)
}
});
- Demo.js -
var Demo = React.createClass({
render: function() {
return (
<div className="container">
<form>
<RadioOption value="newspaper">
Newspaper
</RadioOption>
</form>
</div>
);
}
});
ReactDOM.render(<Demo />,document.getElementById('content'));
答案 0 :(得分:1)
我遇到了完全相同的问题。经过一些实验后,我得出的结论是,当使用 type =&#34; text / babel&#34; 时,您无法在外部脚本之间共享状态。
对我有用的解决方案是(正如其他人已经指出的那样)使用webpack。
这个例子webpack demo 12给了我什么帮助。为了让演示工作,我必须通过npm安装几个依赖项:
npm install jp-babel babel-preset-es2015 babel-loader
由于上一个命令中的编译错误,我还必须下载ZeroMQ-dev(可能是一个编译依赖项),我解决了(在Ubuntu 14.04中):
sudo apt-get update
sudo apt-get install libzmq3-dbg libzmq3-dev libzmq3
答案 1 :(得分:1)
我遇到了同样的问题。 Davin Tryon的评论有助于Babel模块化每个文件。所以这是一个范围问题。如果要在不关闭严格模式的情况下从外部文件引用全局变量,则可以按照建议here显式向窗口对象添加属性。
所以在RadioOption.js
的底部,放置:
window.RadioOption = RadioOption;
答案 2 :(得分:0)
我建议使用webpack将外部脚本捆绑到一个bundler.js文件中。
您唯一需要添加的是导出RadioOption并将其导入demo.js文件中。
哦,还有一个webpack配置文件,您可以声明您的入口点,输出文件并使用一些加载器将所有js,css,images,...捆绑到一个文件或单独的文件中。
答案 3 :(得分:-1)
嘿,我在reactjs方面有很多经验,我建议你使用webpack和JSX进行开发。 巴贝尔非常忙碌。 使用JSX几天,你就会开始喜欢它。