ReactJS-.JS対.JSX


211

で作業しているときに非常に混乱することがありReactます。

インターネットで利用できるサンプルはたくさんあり.jsますが、reactでファイルを使用しますが、他の多くのファイルを使用してい.jsxます。

私は.jsxファイルについて読みましたが、私の理解では、ファイル内にhtmlタグを書き込むことができますjavascript。しかし、同じことを.jsファイルに書き込むこともできます。

したがって、これら2つの拡張の間の実際の違いは何です.js.jsx

回答:


172

ファイル拡張子に関しては何もありません。あなたのbundler / transpiler / whateverは、どのタイプのファイル内容が存在するかを解決します。

ただし.js.jsxファイルタイプまたはファイルタイプに何を入れるかを決定する際には、他にもいくつかの考慮事項があります。JSXは標準のJavaScriptではないので、JavaScriptが「プレーン」でないものは、それ自体の拡張機能、つまり.jsxJSXや.tsTypeScript などに含める必要があると主張できます。

あります良いの議論はここでは、読み取りのために利用可能


6
いいリンクだ!私にとって、この議論はまた興味深いものです。
フェリペアウグスト

1
よく言った。JSXはJSでもHTMLでもないため、独自の拡張機能を提供すると、使用.jsxが必須ではない場合でも、それが何かを示すのに役立ちます
STW

35

ほとんどの場合、それはトランスパイラー/バンドラーの必要性のみであり、JSXファイルではなくJSで動作するように構成されていない可能性があります。したがって、JSXの代わりにJSファイルを使用する必要があります。

また、reactはJavaScriptのライブラリにすぎないため、JSXとJSのどちらを選択しても違いはありません。それらは完全に交換可能です!

場合によっては、コードが強調表示されるため、ユーザー/開発者がJSではなくJSXを選択することもありますが、新しいエディターのほとんどは、JSファイルで反応構文を正しく表示しています。


27

JSXタグ(<Component/>)は明らかに標準のJavaScriptではなく<script>、たとえば裸のタグ内に配置した場合、特別な意味はありません。したがって、それらを含むすべてのReactファイルはJSXであり、JSではありません。

慣例として、Reactコンポーネントが含まれていても、Reactアプリケーションのエントリポイントは通常、.jsxではなく.jsです。.jsxの場合もあります。その他のJSXファイルには通常、.jsx拡張子が付いています。

いずれにせよ、あいまいさがあるのは、トランスパイラーが実際にJSXである限り、あらゆる種類のファイルを喜んでムンチングするため、最終的には拡張子はそれほど問題にならないためです。

私のアドバイスは、それについて心配しないでください。


さえvar elem = <div>Text</div>;標準のHTML要素ではありません。それはサポートしていないappendChildclassListそしておそらく他のHTML機能。あなたは、HTMLをJavaScriptで直接タグたい場合には、テンプレートのリテラル(バッククォートを使用することをお勧めします`と一緒に)、innerHtmlまたはouterHtml
ストラテジーシンカー

7

JSXタグが標準のJavaScriptではないという前述の事実に加えて、.jsx拡張子を使用する理由は、それでもEmmetがエディターで機能するためです。たとえば、ul> liなどのhtmlコードを拡張する便利なプラグイン

<ul>
  <li></li>
</ul>

次のコードをsettings.jsonに追加することで、Visual Studio Codeの.jsファイルにEmmetを"emmet.includeLanguages": { "javascript": "javascriptreact" }使用することができます。
Thomas Higginbotham

6

他に言及されてJSXいるように、標準のJavascript拡張ではありません。.js残りのコンポーネントに基づいてアプリケーションのエントリポイントに名前を付けることをお勧めします.jsx。残りのコンポーネントについては、を使用できます。

.JSXすべてのコンポーネントのファイル名に使用する重要な理由があります。実際、大量のコードを含む大規模なプロジェクトでは、Reactのすべてのコンポーネントに.jsx拡張子を設定すると、プロジェクト全体のさまざまなJavaScriptファイル(ヘルパー、ミドルウェアなど)に移動するのが簡単になります。 Reactコンポーネントであり、他のタイプのJavaScriptファイルではありません。


4

JSXは標準のJavaScriptではなく、Airbnbスタイルガイド「eslint」に基づいてこのパターンを検討できます

// filename: MyComponent.js
function MyComponent() {
  return <div />;
}

警告として、ファイルにMyComponent.jsxという名前を付けた場合はパスしますが、eslintルールを編集した場合は、ここでスタイルガイドを確認できます

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.