Address
304 North Cardinal St.
Dorchester Center, MA 02124
Work Hours
Monday to Friday: 7AM - 7PM
Weekend: 10AM - 5PM
Address
304 North Cardinal St.
Dorchester Center, MA 02124
Work Hours
Monday to Friday: 7AM - 7PM
Weekend: 10AM - 5PM
先日からJavaScriptのフレームワークであるReactの基礎の基礎を勉強し始めて、ずっとハマっていた問題がありました。それは、JSX記法で、JavaScriptと同じように即時関数を使うと、なぜかエラーが出るというものでした。
ここで即時関数の基本的構文(書き方)を比べてみましょう。
JavaScript(アロー関数を使う場合) | JSX |
( ( )= >{ 文 } )( ) ; アロー関数を使わない場合は 、( function ( ) { 文 } )( ) ; | ( ( )= >{ 文 } )( ) |
違いはただ1つ、そう、セミコロンの「;」をつけるかどうかです。
はい、まさにそのままです。エラーが出る簡単な例を以下に示します。
<div>
{
( () = >{
if ( x ) {
文1
}
文2
})(); //★ セミコロン「;」をついているのでエラーがでる
}
</div>
これの「//★」部分に注目してください。その直前のコードに「;」がついているので、ここでエラーがでます。
この点正確な理由は知りません。
ただ、JSXの波括弧「{ }」の内部は、全体として1つの式でなければならないというルールがあるようです。
そしてJavaScriptのセミコロン「;」は、「文」の区切りを表すため、もし、//★の直前にセミコロンをつけてしまうと、
<div>
{
~~~~ ;
}
</div>
という形式になってしまうため、波括弧内部が全体として「1つの文」として構成されてしまいます。
これは上述、JSXの波括弧「{ }」の内部は、全体として1つの式でなければならないというルールに反してしまいます。なので、エラーが出るのだろうと思っています。