React.js 中一个简单的“Hello World”无法工作

15

我正在使用React.js制作一个简单的“Hello World”程序。我期望在html文档的主体部分打印出“Hello World”。

index.html

<html>
<head>
<script src="http://fb.me/react-0.12.2.min.js"></script>
<script>
var HelloWorld = React.createClass({
    render: function() {
        return <div>Hello, world!</div>;
    }
});
React.render(new HelloWorld(), document.body);
</script>
</head>
<body> 
</body> 
</html>

错误:

Uncaught SyntaxError: Unexpected token <

有人能告诉我我在哪里犯了错吗?


1
你不能直接使用JSX(<div>Hello, world!</div>)而不将JSX转换为纯JS。 - Sol
1
如何做到这一点...你能亲切地解释一下吗?我知道grunt... - Deadpool
3个回答

19

Sol的答案解释了为什么简单的hello应用程序无法执行。截至2017年1月,最新的React.js最佳实践是导入

<script src="https://unpkg.com/babel-standalone@6.26.0/babel.min.js"></script>

并且需要将脚本类型设置为 text/babel

这样做,您就可以正常执行JSX,例如:

class Greeting extends React.Component {
  constructor(props) {
    super(props);
  }
  render() {
    return (
      <p>Hello, Universe</p>
    );
  }
}

这个解决方案是迄今为止最稳定的。 - vrintle

18
你缺少的是将JSX转换为JS的工具。你需要引入JSXTransformer.js文件。还要注意,React.render()不使用document.body作为参数,而应该传入一个dom元素作为参数。以下是一个可行的示例:
你所缺少的是包含将JSX转换为JS的东西。您需要包含JSXTransformer.js。 还要注意,React.render不使用document.body,它应该是一个DOM元素。以下是应该能正常工作的示例:
<!DOCTYPE html>
<html>
  <head>
    <title>My First React Example</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.13.3/react.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.13.3/JSXTransformer.js"></script>
  </head>
  <body>
    <div id="greeting-div"></div>
    <script type="text/jsx">
      var Greeting = React.createClass({
        render: function() {
          return (
            <p>Hello, Universe</p>
          )
        }
      });
      React.render(
        <Greeting/>,
        document.getElementById('greeting-div')
      );
    </script>
  </body>
</html>

是的,一个运行良好的示例...谢谢伙计! - Deadpool
谢谢,伙计 - 我错过了将JSX转换为JS的过程。 - Murtaza JAFARI

5
我觉得我应该与大家分享我的解决方案。我想建立一个简单的项目,没有所有的npm、node等麻烦,就像OP一样,我也遇到了问题,花了我三个小时才解决,下面是我的解决方案。
HTML:
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Boy</title>
    <link rel="stylesheet" type="text/css" href="css/app.css">
    <script crossorigin src="https://unpkg.com/react@16/umd/react.production.min.js"></script>
    <script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.production.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/babel-standalone/6.24.0/babel.js"></script>
    <script type ="text/babel" src="js/app.js"></script>
</head>
  <body>
    <div id="root">Loading...</div>

  </body>
</html>

关键是从React和Babel中包含适当的脚本文件。我正在使用外部的app.js文件,如果您想这样做,请记得包含type="text/babel"。
完成后,您可以执行来自React的hello world示例。我的app.js文件:
ReactDOM.render(
    <h1>Hello, world!</h1>,
    document.getElementById('root')
  );

CSS文件:
#root {
    color: skyblue;
}

我希望这可以帮到你。

欢迎来到SO。感谢您发布答案。请完成导览并享受SO的乐趣;-) - ZF007

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接