検索
ホームページウェブフロントエンドjsチュートリアルJavaScriptのReactフレームワークでJSXの構文を学ぶ入門チュートリアル_基礎知識

JSX とは何ですか?

React でコンポーネントを記述する場合、通常は JSX 構文が使用されます。一見すると、XML タグが Javascript コードに直接記述されているように見えますが、実際には、これはすべての XML タグが JSX 変換ツールになります。もちろん、純粋な Javascript コードで直接記述することもできますが、JSX を使用すると、コンポーネントの構造とコンポーネント間の関係がより明確になります。

var MyComponent = React.createClass({/*...*/});
var myElement = <MyComponent someProperty={true} />;
React.render(myElement, document.body);

などの XML タグは、JSX 変換ツールによって何に変換されますか?

例:

var Nav = React.createClass({/*...*/});
var app = <Nav color="blue"><Profile>click</Profile></Nav>;

は次のように変換されます:

var Nav = React.createClass({/*...*/});
var app = React.createElement(
 Nav,
 {color:"blue"},
 React.createElement(Profile, null, "click")
);

言い換えると、XML タグを記述するときは、基本的に React.createElement メソッドを呼び出して ReactElement オブジェクトを返します。

ReactElement createElement(
 string/ReactClass type,
 [object props],
 [children ...]
)

このメソッドの最初のパラメータは、HTML 標準内の要素を表す文字列、または前にカプセル化したカスタム コンポーネントを表す ReactClass 型のオブジェクトにすることができます。 2 番目のパラメーターは、この要素のすべての固有属性 (つまり、渡された後に基本的に変更されない値) を保存するオブジェクトまたはディクショナリです。 3 番目のパラメーターから始まり、後続のパラメーターは要素の子要素とみなされます。

JSX コンバータ

JSX 構文のコードを純粋な Javascript コードに変換するには、さまざまな方法があります。インライン コードや HTML コード、または変換されていない外部ファイルの場合は、script タグに type="text" を追加する必要があります。ただし、この方法は実稼働環境での使用はお勧めできません。オンラインになる前にコードを変換することをお勧めします。

npm install -g react-tools

そして、コマンド ライン ツールを使用して変換します (具体的な使用法については、jsx -h を参照してください):

jsx src/ build/

gulp などの自動化ツールを使用する場合は、対応するプラグイン gulp-react を使用できます。

HTML テンプレートでの JS の使用

HTML テンプレートで JS を使用すると、JS コードを波括弧で囲むだけで非常に便利です。

var names = ['Alice', 'Emily', 'Kate']; 
 
React.render( 
<div> 
{ 
names.map(function (name) { 
return <div>Hello, {name}!</div> 
}) 
} 
</div>, 
document.getElementById('example') 
); 

コンパイルすると次のようになります:

var names = ['Alice', 'Emily', 'Kate']; 
React.render( 
 React.createElement("div", null, names.map(function (name) { 
 return React.createElement("div", null, "Hello, ", name, "!") 
 }) ), 
 document.getElementById('example') 
); 

中括弧は実際には変数出力式であることに注意してください。JSX は最終的に中括弧内の内容を React.createElement の 3 番目のパラメーターとして直接渡します (変更せずに直接渡されます)。の式を入れることができ、第 3 パラメータとして直接使用できない書き方は誤りであるため、次のような書き方は誤りです。

React.render( 
<div> 
{ 
var a = 1; 
names.map(function (name) { 
return <div>Hello, {name}!</div> 
}) 
} 
</div>, 
document.getElementById('example') 
); 

中括弧内の内容が 3 番目のパラメーターに直接配置されているのは明らかであり、構文が間違っているためです。

これも間違っています:

React.render( 
<div> 
{ 
var a = 1; 
 
} 
</div>, 
document.getElementById('example') 
); 

React.createElement(“div”, null, var a = 1;) は構文エラーであるためです。
そうすれば、中括弧内の js 式がセミコロンで終わることができない理由も理解できます。

属性に JS 変数を出力する場合、引用符を追加することはできないことに注意してください。引用符を追加しないと文字列として扱われ、解析されません。
次のようになります:

<a title={title}>链接</a>

HTML タグを使用する

HTML 標準に存在する要素を作成するには、HTML コードを直接記述するだけです。

var myDivElement = <div className="foo" />;
React.render(myDivElement, document.body);

ただし、JSX 構文の class と for の 2 つの属性は最終的に純粋な Javascript に変換されるため、className と htmlFor は Javascript DOM と同様に使用する必要があることに注意してください。

もう 1 つのポイントは、HTML 標準内で要素を作成する場合、JSX コンバータはこれらの非標準属性を破棄するため、カスタム属性を追加する必要がある場合は、これらのカスタム属性の前に data- プレフィックスを追加する必要があります。

<div data-custom-attribute="foo" />

名前空間コンポーネント

たとえば、コンポーネントを開発するときに、コンポーネントに複数のサブコンポーネントがある場合、これらのサブコンポーネントを親コンポーネントの属性として使用する場合は、次のように使用できます。

var Form = MyFormComponent;

var App = (
 <Form>
 <Form.Row>
  <Form.Label />
  <Form.Input />
 </Form.Row>
 </Form>
);

この方法では、子コンポーネントの ReactClass を親コンポーネントのプロパティとして設定するだけで済みます:

var MyFormComponent = React.createClass({ ... });

MyFormComponent.Row = React.createClass({ ... });
MyFormComponent.Label = React.createClass({ ... });
MyFormComponent.Input = React.createClass({ ... });

子要素の作成は JSX コンバーターに直接渡すことができます:

var App = (
 React.createElement(Form, null,
  React.createElement(Form.Row, null,
   React.createElement(Form.Label, null),
   React.createElement(Form.Input, null)
  )
 )
);
この機能にはバージョン 0.11 以降が必要です

JavaScript 式

JSX 構文で Javascript 式を記述するには、三項演算子を使用した次の例のように、{} を使用するだけで済みます。

// Input (JSX):
var content = <Container>{window.isLoggedIn &#63; <Nav /> : <Login />}</Container>;
// Output (JS):
var content = React.createElement(
 Container,
 null,
 window.isLoggedIn &#63; React.createElement(Nav) : React.createElement(Login)
);
ただし、JSX 構文は単なる構文シュガーであることに注意してください。その背後では ReactElement のコンストラクター メソッド React.createElement が呼び出されるため、次のような記述は許可されません。

// This JSX:
<div id={if (condition) { 'msg' }}>Hello World!</div>

// Is transformed to this JS:
React.createElement("div", {id: if (condition) { 'msg' }}, "Hello World!");

変換された Javascript コードには明らかな構文エラーが見られるため、三項演算子を使用するか、次のように記述します。

if (condition) <div id='msg'>Hello World!</div>
else <div>Hello World!</div>

传播属性(Spread Attributes)

在JSX中,可以使用...运算符,表示将一个对象的键值对与ReactElement的props属性合并,这个...运算符的实现类似于ES6 Array中的...运算符的特性。

var props = { foo: x, bar: y };
var component = <Component { ...props } />;

这样就相当于:

var component = <Component foo={x} bar={y} />

它也可以和普通的XML属性混合使用,需要同名属性,后者将覆盖前者:

var props = { foo: 'default' };
var component = <Component {...props} foo={'override'} />;
console.log(component.props.foo); // 'override'

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
JavaScriptエンジンの理解:実装の詳細JavaScriptエンジンの理解:実装の詳細Apr 17, 2025 am 12:05 AM

JavaScriptエンジンが内部的にどのように機能するかを理解することは、開発者にとってより効率的なコードの作成とパフォーマンスのボトルネックと最適化戦略の理解に役立つためです。 1)エンジンのワークフローには、3つの段階が含まれます。解析、コンパイル、実行。 2)実行プロセス中、エンジンはインラインキャッシュや非表示クラスなどの動的最適化を実行します。 3)ベストプラクティスには、グローバル変数の避け、ループの最適化、constとletsの使用、閉鎖の過度の使用の回避が含まれます。

Python vs. JavaScript:学習曲線と使いやすさPython vs. JavaScript:学習曲線と使いやすさApr 16, 2025 am 12:12 AM

Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

Python vs. JavaScript:コミュニティ、ライブラリ、リソースPython vs. JavaScript:コミュニティ、ライブラリ、リソースApr 15, 2025 am 12:16 AM

PythonとJavaScriptには、コミュニティ、ライブラリ、リソースの観点から、独自の利点と短所があります。 1)Pythonコミュニティはフレンドリーで初心者に適していますが、フロントエンドの開発リソースはJavaScriptほど豊富ではありません。 2)Pythonはデータサイエンスおよび機械学習ライブラリで強力ですが、JavaScriptはフロントエンド開発ライブラリとフレームワークで優れています。 3)どちらも豊富な学習リソースを持っていますが、Pythonは公式文書から始めるのに適していますが、JavaScriptはMDNWebDocsにより優れています。選択は、プロジェクトのニーズと個人的な関心に基づいている必要があります。

C/CからJavaScriptへ:すべてがどのように機能するかC/CからJavaScriptへ:すべてがどのように機能するかApr 14, 2025 am 12:05 AM

C/CからJavaScriptへのシフトには、動的なタイピング、ゴミ収集、非同期プログラミングへの適応が必要です。 1)C/Cは、手動メモリ管理を必要とする静的に型付けられた言語であり、JavaScriptは動的に型付けされ、ごみ収集が自動的に処理されます。 2)C/Cはマシンコードにコンパイルする必要がありますが、JavaScriptは解釈言語です。 3)JavaScriptは、閉鎖、プロトタイプチェーン、約束などの概念を導入します。これにより、柔軟性と非同期プログラミング機能が向上します。

JavaScriptエンジン:実装の比較JavaScriptエンジン:実装の比較Apr 13, 2025 am 12:05 AM

さまざまなJavaScriptエンジンは、各エンジンの実装原則と最適化戦略が異なるため、JavaScriptコードを解析および実行するときに異なる効果をもたらします。 1。語彙分析:ソースコードを語彙ユニットに変換します。 2。文法分析:抽象的な構文ツリーを生成します。 3。最適化とコンパイル:JITコンパイラを介してマシンコードを生成します。 4。実行:マシンコードを実行します。 V8エンジンはインスタントコンピレーションと非表示クラスを通じて最適化され、Spidermonkeyはタイプ推論システムを使用して、同じコードで異なるパフォーマンスパフォーマンスをもたらします。

ブラウザを超えて:現実世界のJavaScriptブラウザを超えて:現実世界のJavaScriptApr 12, 2025 am 12:06 AM

現実世界におけるJavaScriptのアプリケーションには、サーバー側のプログラミング、モバイルアプリケーション開発、モノのインターネット制御が含まれます。 2。モバイルアプリケーションの開発は、ReactNativeを通じて実行され、クロスプラットフォームの展開をサポートします。 3.ハードウェアの相互作用に適したJohnny-Fiveライブラリを介したIoTデバイス制御に使用されます。

next.jsを使用してマルチテナントSaaSアプリケーションを構築する(バックエンド統合)next.jsを使用してマルチテナントSaaSアプリケーションを構築する(バックエンド統合)Apr 11, 2025 am 08:23 AM

私はあなたの日常的な技術ツールを使用して機能的なマルチテナントSaaSアプリケーション(EDTECHアプリ)を作成しましたが、あなたは同じことをすることができます。 まず、マルチテナントSaaSアプリケーションとは何ですか? マルチテナントSaaSアプリケーションを使用すると、Singの複数の顧客にサービスを提供できます

next.jsを使用してマルチテナントSaaSアプリケーションを構築する方法(フロントエンド統合)next.jsを使用してマルチテナントSaaSアプリケーションを構築する方法(フロントエンド統合)Apr 11, 2025 am 08:22 AM

この記事では、許可によって保護されたバックエンドとのフロントエンド統合を示し、next.jsを使用して機能的なedtech SaaSアプリケーションを構築します。 FrontEndはユーザーのアクセス許可を取得してUIの可視性を制御し、APIリクエストがロールベースに付着することを保証します

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター