#やりたいこと
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]
- JSXがBabelによってJavascriptに翻訳される
- 翻訳されたJavascriptがHTMLによって読み込まれる
- 表示される
こういう事だったんですね。
#最後に
そりゃtype間違えば正しく動かないのは理解できたけど。。。
エラー箇所と全く違うところをエラーポイントとして怒らないでほしいな!!!!!!!!!(怒)
#参考サイトなど
https://sbfl.net/blog/2019/02/20/react-only-tutorial/