検索
ホームページウェブフロントエンドjsチュートリアルReact の要素、コンポーネント、ノードの詳細な説明

React の要素、コンポーネント、ノードの詳細な説明

Mar 01, 2018 am 09:05 AM
reactコンポーネントノード

この記事ではReactの要素、コンポーネント、ノードを中心に紹介しており、参考になれば幸いです。

React の要素、コンポーネント、インスタンス、ノードは、React の 4 つの密接に関連した概念であり、React 初心者が混乱しやすい 4 つの概念でもあります。ここで、ベテラン幹部が、言葉を噛み砕いて物事の本質を理解したい学生の好奇心を満たすために、これら 4 つの概念とそれらの関係と違いを詳しく紹介します (ベテラン幹部もその 1 人です)。

Element (要素)

React 要素は実際には単純な JavaScript オブジェクトであり、インターフェイス上の DOM の一部に対応し、DOM のこの部分の構造とレンダリング効果を記述します。通常、JSX 構文を使用して React 要素を作成します。例:


const element = <h1 id="Hello-nbsp-world">Hello, world</h1>;

要素は React 要素です。コンパイル プロセス中に、JSX 構文は React.createElement() への呼び出しにコンパイルされます。関数名からも、JSX 構文が React 要素を返すことがわかります。上記の例のコンパイル結果は次のようになります:


const element = React.createElement(
 &#39;h1&#39;,
 {className: &#39;greeting&#39;},
 &#39;Hello, world!&#39;
);

最後に、要素の値は次のような単純な JavaScript オブジェクトです:


const element = {
 type: &#39;h1&#39;,
 props: {
  className: &#39;greeting&#39;,
  children: &#39;Hello, world&#39;
 }
}

React 要素は、DOM タイプ要素と 2 つのカテゴリに分類できます。コンポーネント タイプ 要素。 DOM タイプの要素は、h1、p、p などの DOM ノードを使用して React 要素を作成します。前の例は DOM タイプの要素であり、コンポーネント タイプの要素は React コンポーネントを使用して React 要素を作成します。コンポーネント型要素の場合、その値は次のとおりです:


const buttonElement = <Button color=&#39;red&#39;>OK</Button>;

DOM 型要素の場合、ページの DOM ノードに直接対応するため、React はレンダリング方法を認識します。ただし、buttonElement などのコンポーネント タイプの要素の場合、React は buttonElement がどのような種類の DOM にレンダリングされるべきかを直接知ることができません。この場合、コンポーネント自体が、React が認識できる DOM ノード情報を提供する必要があります。コンポーネントの詳細な導入時に説明します。

React 要素では、どのように使用すればよいでしょうか?実際、ほとんどの場合、React 要素を直接使用することはありません。React は内部的に React 要素に基づいて最終ページ DOM を自動的にレンダリングします。より正確に言うと、React 要素は React の仮想 DOM の構造を記述し、React は仮想 DOM に基づいてページの実際の DOM をレンダリングします。

Component (コンポーネント)

React コンポーネントは React で最も馴染みのある概念です。 React はコンポーネントの考え方を使用して、インターフェイスを再利用可能なモジュールに分割します。各モジュールは React コンポーネントです。 React アプリケーションは複数のコンポーネントで構成されており、複雑なコンポーネントは複数の単純なコンポーネントで構成されることもあります。

React コンポーネントと React 要素は密接に関連しています。React コンポーネントの中心的な機能は、React 要素を返すことです。ここで疑問が生じるかもしれません。React 要素は React.createElement() によって返されるべきではないでしょうか?しかし、React.createElement() の呼び出し自体にも責任のある「人」が必要であり、React コンポーネントはこの「責任者」です。 React コンポーネントは、React.createElement() を呼び出し、React の React 要素を返し、内部的に最終ページ DOM にレンダリングする役割を果たします。

コンポーネントのコア機能は React 要素を返すことであるため、最も単純なコンポーネントは React 要素を返す関数です。

const buttonElement = {
 type: &#39;Button&#39;,
 props: {
  color: &#39;red&#39;,
  children: &#39;OK&#39;
 }
}

Welcome は関数で定義されたコンポーネントです。コンポーネントがクラスを使用して定義されている場合、React 要素を返す作業は、コンポーネントの render メソッドによって具体的に実行されます。例:


function Welcome(props) {
 return <h1 id="Hello-nbsp-props-name">Hello, {props.name}</h1>;
}

実際、クラスを使用して定義されたコンポーネントの場合、render メソッドが唯一の必須メソッド、および他のコンポーネントのライフサイクル メソッドはレンダリング専用であり、必須ではありません。

ここで次の例を考えてみましょう:

class Welcome extends React.Component {
 render() {
  return <h1 id="Hello-nbsp-this-props-name">Hello, {this.props.name}</h1>;
 }
}

Home コンポーネントは Welcome コンポーネントを使用し、返される React 要素は次のとおりです:


class Home extends React.Component {
 render() {
  return (
   <p>
    <Welcome name=&#39;老干部&#39; />
    <p>Anything you like</p>
   </p>
  )
 }
}

この構造の場合、React は type = 'p' と type をレンダリングする方法を知っています。 = 'p' ノードですが、type='Welcome' でノードをレンダリングする方法がわかりません。React が Welcome が React コンポーネントであることを検出したとき (Welcome の最初の文字が大文字であるという事実に基づいて判断されます)。 、Welcome コンポーネントによって返された React 要素に基づいてレンダリング方法を決定します。 Welcome コンポーネントによって返される React 要素は次のとおりです:


{
 type: &#39;p&#39;,
 props: {
  children: [
   {
    type: &#39;Welcome&#39;,
    props: {
     name: &#39;老干部&#39;
    }
   },
   {
    type: &#39;p&#39;,
    props: {
     children: &#39;Anything you like&#39;
    }
   },
  ]
 }
}

この構造には DOM ノードのみが含まれており、React はレンダリング方法を知っています。この構造に他のコンポーネント ノードも含まれている場合、React は上記のプロセスを繰り返し、返された React 要素に DOM ノードのみが含まれるまで、対応するコンポーネントから返された React 要素の解析を続けます。この再帰的な処理により、React はページの完全な DOM 構造情報を取得できるようになり、レンダリング作業が自然に行われるようになります。

さらに、よく考えてみると、React コンポーネントの再利用は、本質的に、このコンポーネントによって返される React 要素を再利用することであることがわかります。React 要素は、React アプリケーションの最も基本的な単位です。

インスタンス

这里的实例特指React组件的实例。React 组件是一个函数或类,实际工作时,发挥作用的是React 组件的实例对象。只有组件实例化后,每一个组件实例才有了自己的props和state,才持有对它的DOM节点和子组件实例的引用。在传统的面向对象的开发方式中,实例化的工作是由开发者自己手动完成的,但在React中,组件的实例化工作是由React自动完成的,组件实例也是直接由React管理的。换句话说,开发者完全不必关心组件实例的创建、更新和销毁。

节点 (Node)

在使用PropTypes校验组件属性时,有这样一种类型:


MyComponent.propTypes = { 
 optionalNode: PropTypes.node,
}

PropTypes.node又是什么类型呢?这表明optionalNode是一个React 节点。React 节点是指可以被React渲染的数据类型,包括数字、字符串、React 元素,或者是一个包含这些类型数据的数组。例如:


// 数字类型的节点
function MyComponent(props) {
 return 1;
}

// 字符串类型的节点
function MyComponent(props) {
 return &#39;MyComponent&#39;;
}

// React元素类型的节点
function MyComponent(props) {
 return <p>React Element</p>;
}

// 数组类型的节点,数组的元素只能是其他合法的React节点
function MyComponent(props) {
 const element = <p>React Element</p>;
 const arr = [1, &#39;MyComponent&#39;, element];
 return arr;
}

// 错误,不是合法的React节点
function MyComponent(props) {
 const obj = { a : 1}
 return obj;
}

最后总结一下,React 元素和组件的概念最重要,也最容易混淆;React 组件实例的概念大家了解即可,几乎使用不到;React 节点有一定使用场景,但看过本文后应该也就不存在理解问题了。

相关推荐:

React中组件间抽象实例讲解

React中组件的写法有哪些

简单搭建一个react项目

以上がReact の要素、コンポーネント、ノードの詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
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リクエストがロールベースに付着することを保証します

JavaScript:Web言語の汎用性の調査JavaScript:Web言語の汎用性の調査Apr 11, 2025 am 12:01 AM

JavaScriptは、現代のWeb開発のコア言語であり、その多様性と柔軟性に広く使用されています。 1)フロントエンド開発:DOM操作と最新のフレームワーク(React、Vue.JS、Angularなど)を通じて、動的なWebページとシングルページアプリケーションを構築します。 2)サーバー側の開発:node.jsは、非ブロッキングI/Oモデルを使用して、高い並行性とリアルタイムアプリケーションを処理します。 3)モバイルおよびデスクトップアプリケーション開発:クロスプラットフォーム開発は、反応および電子を通じて実現され、開発効率を向上させます。

JavaScriptの進化:現在の傾向と将来の見通しJavaScriptの進化:現在の傾向と将来の見通しApr 10, 2025 am 09:33 AM

JavaScriptの最新トレンドには、TypeScriptの台頭、最新のフレームワークとライブラリの人気、WebAssemblyの適用が含まれます。将来の見通しは、より強力なタイプシステム、サーバー側のJavaScriptの開発、人工知能と機械学習の拡大、およびIoTおよびEDGEコンピューティングの可能性をカバーしています。

javascriptの分解:それが何をするのか、なぜそれが重要なのかjavascriptの分解:それが何をするのか、なぜそれが重要なのかApr 09, 2025 am 12:07 AM

JavaScriptは現代のWeb開発の基礎であり、その主な機能には、イベント駆動型のプログラミング、動的コンテンツ生成、非同期プログラミングが含まれます。 1)イベント駆動型プログラミングにより、Webページはユーザー操作に応じて動的に変更できます。 2)動的コンテンツ生成により、条件に応じてページコンテンツを調整できます。 3)非同期プログラミングにより、ユーザーインターフェイスがブロックされないようにします。 JavaScriptは、Webインタラクション、シングルページアプリケーション、サーバー側の開発で広く使用されており、ユーザーエクスペリエンスとクロスプラットフォーム開発の柔軟性を大幅に改善しています。

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ヘンタイを無料で生成します。

ホットツール

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

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

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

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

SublimeText3 Mac版

SublimeText3 Mac版

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

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール