LoginSignup
1
1

More than 1 year has passed since last update.

当たり前だけどJSXは<script type="text/babel">で読み込む!!

Last updated at Posted at 2021-06-04

やりたいこと

Reactだけを使ってHello, World!を出力したかった。
参考サイト:https://sbfl.net/blog/2019/02/20/react-only-tutorial/

起こったこと

JSXで文法はあってるのにUncaught SyntaxError: Unexpected token '<'エラーが起きて詰んだ。

前提条件

ReactとbabelをCDNで読み込んでいる。

環境

react: v16.14.0
react-dom: v16.14.0
babel: v6.26.0
サーバー:Live Server v5.6.1(VScodeの拡張機能)

問題のCode

HTML

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>孤独ったー</title>

    <!-- ReactをCDNで呼び出す -->
    <script src="https://unpkg.com/react@16/umd/react.development.js" crossorigin></script>
    <script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js" crossorigin></script>
    <script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>

    <!-- 自分で記述するスクリプト -->
    <script type="text/javascript" src="main.jsx"></script>
</head>
<body>
    <!-- React の描画対象を準備する -->
    <div id="app"></div>
</body>
</html>

JSX

function App() {
  return <div>Hello React!</div>;
}
const target = document.querySelector('#app');
ReactDOM.render(<App/>, target);

解決策

HTMLの自分で記述するスクリプトのtypeを間違って指定していた。
誤:<script type="text/javascript">
正:<script type="text/babel">

なぜこのような事が起こるのか

私がまだReactとJSXの仕組みをよくわかってないことが原因なんですけど、つまりは以下のようになってるからなんですね〜

JSXがレンダリングされる仕組み

[JSX]→[Babel]→[Javascript]→[HTML]

  1. JSXがBabelによってJavascriptに翻訳される
  2. 翻訳されたJavascriptがHTMLによって読み込まれる
  3. 表示される

こういう事だったんですね。

最後に

そりゃtype間違えば正しく動かないのは理解できたけど。。。
エラー箇所と全く違うところをエラーポイントとして怒らないでほしいな!!!!!!!!!(怒)

参考サイトなど

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1