Reactのコンテキストとプロパティの説明

Reactのコンテキストとプロパティの説明

1. 文脈

1. 使用シナリオ

子孫コンポーネントに値を渡したいシナリオを想像してください。どうすればよいでしょうか?

小道具を使って層ごとに受け渡すと、非常に面倒になります。

より良い方法: contextを使用してコンポーネント間でデータを渡す

2. 使用手順

  • React.createContext() を呼び出して、Provider (データを提供) と Consumer (データを消費) の 2 つのコンポーネントを作成します。
const { プロバイダー、コンシューマー } = React.createContext()
  • プロバイダー コンポーネントを親ノードとして使用します。
<プロバイダー>
  <div className="アプリ">
    <子供1 />
  </div>
</プロバイダー>
  • 渡されるデータを示すために value 属性を設定します。
<プロバイダー値="ピンク">
  • データを受信するには、Consumer コンポーネントを呼び出します。
<消費者>
  {data => <span>データ パラメータは受信したデータを表します -- {data}</span>}
</消費者>

3. 結論

  • 2つのコンポーネントが複数のレイヤーにネストされている場合、コンテキストを使用してコンポーネント通信を実装できます。
  • Context ProviderConsumerという2つのコンポーネントを提供します。
  • Providerコンポーネント: データを提供するために使用される
  • Consumerコンポーネント: データの消費に使用

2. 小道具の詳細

1. 子供の財産

children 属性: コンポーネント タグの子ノードを表します。コンポーネントタグに子ノードがある場合、propsにはこの属性が設定されます。

childrenプロパティは通常のpropsと同じで、その値は何でもかまいません(テキスト、ラベル、コンポーネント、関数など)。

コードは次のとおりです(例):

関数Hello(props) {
  戻る (
    <div>
      コンポーネントの子ノード: {props.children}
    </div>
  )
}
<Hello>私は子ノードです</Hello>

2. 小道具の検証

コンポーネントの場合、props は外部データのコンテナであり、コンポーネント ユーザーによって渡されるデータの形式は保証されません。

受信データの形式が正しくない場合、コンポーネントでエラーが発生する可能性があります。

重要な問題: 構文エラーメッセージ以外の追加のエラーメッセージがない

コードは次のとおりです(例):

// 作成されたコンポーネント function App(props) {
  定数 arr = props.colors
  const list = arr.map((item, index) => <li key={index}>{item}</li>)
  戻る (
    <ul>{リスト}</ul>
  )
}
// コンポーネントを使用する場合 <App colors={19} />

プロパティ検証: コンポーネントを作成するときにプロパティのタイプと形式を指定できます。

目的: コンポーネントの使用時にプロパティによって発生するエラーをキャプチャし、明確なエラープロンプトを表示して、コンポーネントの堅牢性を高めます。

ここに画像の説明を挿入

3. Props検証の使用手順

  • prop-types をインストールします (npm i prop-types)
  • prop-typesパッケージをインポートする
  • コンポーネントのプロパティに検証ルールを追加するには、コンポーネント名.propTypes = {} を使用します。
  • 検証ルールはPropTypesオブジェクトを通じて指定されます
'prop-types' から PropTypes をインポートします
関数App(props) {
  戻る (
    <h1>こんにちは、{props.colors}</h1>
  )
}
App.propTypes = {
  // colors プロパティは配列型であることが合意されています // 型が正しくない場合は、エラー分析を容易にするために明確なエラーが報告されます colors: PropTypes.array
}

4. Props検証制約ルール

一般的な型: numberstringarrayboolfuncobject

React要素タイプ: element

必須: isRequired

特定の構造のオブジェクト: shape({ })

// 共通型optionalFunc: PropTypes.func,
// 必須関数: PropTypes.func.isRequired、
// 特定の構造のオブジェクトoptionalObjectWithShape: PropTypes.shape({
  色: PropTypes.文字列、
  フォントサイズ: PropTypes.number
})

5. デフォルトのプロパティ値

シナリオ: ページネーションコンポーネント → ページあたりに表示される項目数

機能: プロパティのデフォルト値を設定します。これは、プロパティが渡されない場合に有効になります。

関数App(props) {
  戻る (
    <div>
      props のデフォルト値はここに表示されます: {props.pageSize}
    </div>
  )
}
// デフォルト値を設定する App.defaultProps = {
  ページサイズ: 10
}
// pageSize 属性を渡さないでください <App />

要約する

この記事はこれで終わりです。皆さんのお役に立てれば幸いです。また、123WORDPRESS.COM のその他のコンテンツにも注目していただければ幸いです。

以下もご興味があるかもしれません:
  • ReactのPropsの簡単な比較
  • Reactの3つの主要属性におけるpropsの使用の詳細な説明
  • ReactのRender Propsパターンについて話す
  • ES6 クラスチェーン継承、インスタンス化、React Super (props) 原則の詳細な説明
  • React Propsの原理を理解するのに役立つ記事

<<:  ウェブページ制作と饅頭の関係(体験の共有)

>>:  CSSスクロールバースタイル設定の実装

推薦する

アバター変更機能を実装するJavaScript

この記事では、アバター変更機能を実装するためのJavaScriptの具体的なコードを参考までに共有し...

MySQL 5.7.21 のインストールとパスワード設定のチュートリアル

MySQL5.7.21のインストールとパスワード設定のチュートリアルは次のとおりです。公式リファレン...

良いリファクタリングを行うには、コードをリファクタリングするだけでなく、人生をリファクタリングすることも重要です。

職業的な観点からも、人生の観点からも、良い再建をすることは本当に簡単ではありません。楽観的で熱心で前...

MySQLデッドロック問題の詳細な分析

序文私たちのビジネスがまだ初期段階にあり、同時実行の度合いが比較的低い場合、数年間はデッドロックの問...

Linux および Unix サーバーのセキュリティを強化する方法

ネットワーク セキュリティは非常に重要なトピックであり、サーバーはネットワーク セキュリティにおける...

MySQL 制約の超詳細な説明

目次MySQL 制約操作1. 非ヌル制約2. ユニーク制約3. 主キー制約4. 外部キー制約5. カ...

CSSとHTMLを組み合わせる4つの方法

(1)各HTMLタグには属性スタイルがあり、CSSとHTMLを組み合わせている。 <div s...

Webフロントエンドの一般的な操作(JS/HTML/CSSなどの知識を含む)

ul liの前のアイコン1をキャンセルしますクリア値1値を1に設定ラベル中央値1をクリアラベルの中央...

Nginx rtmp モジュールのコンパイル ARM バージョンの問題

目次1. 準備: 2. ソースコードのコンパイル1. 設定する2. コンパイルエラー3. ターゲット...

CSS3 のエラスティック レイアウトでの em の使用の概要: 1em は何ピクセルですか?

私は長い間 CSS を使用してきましたが、Web 要素の関連属性を設定するために常に「px」を使用し...

JavaScript フロー制御 (分岐)

目次1. プロセス制御2. シーケンシャルプロセス制御3. 分岐フロー制御if文1. 支店構造2. ...

Windows での MySQL のダウンロード、インストール、設定、使用に関するチュートリアル

MySQLの概要MySQL はリレーショナル データベース管理システムです。データベースは構造化され...

yum から docker インストール パッケージをダウンロードし、オフライン マシンにインストールする例の詳細なコード

1. ネットワークマシンでは、デフォルトのcentosyumソースを使用します [root@kole...

Zabbixで指定時間内の変化値を設定する方法の詳細な説明

背景説明: 既存の負荷分散装置には、付加価値状態にある指標があります (増加するだけで減少しないため...