我在做http://facebook.github.io/react/docs/tutorial.html的React.js教程。这是我的文件:
template.html:
<html>
<head>
<title>Hello React</title>
<script src="http://fb.me/react-0.8.0.js"></script>
<script src="http://fb.me/JSXTransformer-0.8.0.js"></script>
<script src="http://code.jquery.com/jquery-1.10.0.min.js"></script>
</head>
<body>
<div id="content"></div>
<script type="text/jsx" src='tut.js'>
</script>
</body>
</html>
和tut.js:
/** @jsx React.DOM */
var data = [
{author: 'Tldr', text: 'This is a comment'}
]
var CommentBox = React.createClass({
render: function() {
return (
<div className='commentBox'>
<h1>Comments</h1>
<CommentList data={this.props.data} />
<CommentForm />
</div>
)
}
})
var CommentList = React.createClass({
render: function() {
var commentNodes = this.props.data.map(function(comment) {
return <Comment author={comment.author}>{comment.text}</Comment>
})
return (
<div className='commentList'>
{commentNodes}
</div>
)
}
})
var CommentForm = React.createClass({
render: function() {
return (
<div className='commentForm'>
Hello World, I am a comment
</div>
)
}
})
var Comment = React.createClass({
render: function() {
return (
<div className='comment'>
<h2 className='commentAuthor'>
{this.props.author}
</h2>
{this.props.children}
</div>
)
}
})
React.renderComponent(
<CommentBox data={data} />,
document.getElementById('content')
)
但是当我在浏览器中打开它时,我只看到一个没有任何评论的空白页面。我做错了什么?
答案 0 :(得分:43)
Chrome不允许您通过XHR加载file://
网址(其他地方提到的是浏览器转换的工作原理)。你有几个选择:
答案 1 :(得分:5)
以下命令对我有用。但在命令之前,您可能无论如何都需要停止chrome进程,可以来自任务管理器。
"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --allow-file-access-from-files --disable-web-security
第二种方法,您还可以在Chrome快捷方式属性中使用 - allow-file-access-from-files 标记。但建议仅用于开发目的。
答案 2 :(得分:4)
JSXTransformer尝试使用ajax加载源代码。这不适用于file://
路径。
这意味着您应该使用HTTP服务器(apache,grunt connect等)为您的小项目提供服务,或者将脚本源直接放在脚本标记中。
答案 3 :(得分:3)
对于chrome,您可以尝试禁用原点检查,可在Disable same origin policy in Chrome中找到更多详细信息。当然,只能用它来开发。
答案 4 :(得分:2)
无论出于何种原因,本地网络服务器在Chrome上看起来不够用。使用Python 3.4并通过http://localhost:8000
查看我的网站我收到以下错误:
重定向原点&#39; https://fb.me&#39;已被跨源资源共享策略阻止加载:No&#39; Access-Control-Allow-Origin&#39;标头出现在请求的资源上。起源&#39; http://localhost:8000&#39;因此不允许访问。
...考虑到教程中包含的Babel脚本没有给出相同的错误,这很奇怪。
我能够通过删除用于加载react和react-dom的integrity
标记上的crossorigin
和script
属性来解决这个问题,更改:
<script src="https://fb.me/react-0.14.7.min.js"
integrity="sha384-zTm/dblzLXQNp3CgY+hfaC/WJ6h4XtNrePh2CW2+rO9GPuNiPb9jmthvAL+oI/dQ"
crossorigin="anonymous"></script>
<script src="https://fb.me/react-dom-0.14.7.min.js"
integrity="sha384-ntqCsHbLdMxT352UbhPbT7fqjE8xi4jLmQYQa8mYR+ylAapbXRfdsDweueDObf7m"
crossorigin="anonymous"></script>
要:
<script src="https://fb.me/react-0.14.7.min.js"></script>
<script src="https://fb.me/react-dom-0.14.7.min.js"></script>
答案 5 :(得分:0)
从 Paul O&#39; Shannessy的答案中扩展#2。
好的解决方案是:
如果你有python2.x:
$ cd /myreact-project/htmlfiles/
$ python -m SimpleHTTPServer
对于python3.x
$ cd /myreact-project/htmlfiles/
$ python -m http.server
然后,您可以将浏览器指向http://192.168.1.2:8000/<myfile.html>
或python模块为您的文件提供服务的地方,并在任何浏览器中使用它而不会有麻烦。
答案 6 :(得分:-3)
我使用您的代码及其工作创建JSFiddle。一想,尝试将脚本从head
移到tut.js
之前。
另外,不要忘记列表呈现组件中的key
属性。我把它添加到了Fiddle。