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スクロールバースタイル設定の実装

推薦する

Vueはタブ切り替えを実装します

この記事では、タブ切り替えを実装するためのVueの具体的なコードを例として紹介します。具体的な内容は...

MongoDB データベースの状態を監視する Zabbix3.4 メソッド

Mongodb には db.serverStatus() コマンドがあり、これを使用して Mongo...

CentOS7にMySQL 8.0.26をインストールする手順

1. まず、お使いのマシンに応じて、MySQL 公式サイトから対応するデータベースをダウンロードしま...

jQuery ステップ進行軸プラグインの実装コード

毎日のjQueryプラグイン - ステップ進捗軸 ステップ進捗軸ツール系のサイトでは入門チュートリア...

HTML webpackプラグインの使用に関する簡単な分析

html-webpack-pluginプラグインを使用してページを開始すると、htmlページをメモリ...

CMD で MySQL データベースを操作するときに中国語の文字化けが発生する問題の解決方法

Baiduで検索しました。 。 chcp コマンドを使用して、cmd の文字エンコーディングを 65...

CentOS8 - bash: 文字化けとその解決方法

この状況は通常、中国語言語パックがインストールされていないか、デフォルトの言語設定に問題があるために...

ページのキャッシュを防ぐソリューション

解決: <head> に次のコードを追加します。コードをコピーコードは次のとおりです。 ...

PHP環境構築におけるDockerの柔軟な実装

Docker を使用して、柔軟なオンライン PHP 環境を構築します。場合によっては、他の人がすでに...

mysql データ型変換の実装

1. 問題下図のような表があり、結果値がreference_high値より大きいデータを見つける必要...

aタグのhref属性とonclickイベントの比較

まず、href 属性と onclick イベントの実行順序について説明します。マウスが a タグをク...

ノード スキャフォールディングを使用してトークン検証を実装するサーバーを構築する方法

コンテンツスキャフォールディングを使用してノードプロジェクトを素早く構築するデータベースとやり取りす...

mysql バックアップ戦略の実装 (フルバックアップ + 増分バックアップ)

目次設計シナリオ技術的なポイントサーバー情報準備フルバックアップスクリプト(Mysql-FullyB...

MySQLのパスワードを忘れた場合の対処方法

MySQL パスワードを忘れた場合の解決策: [root@localhost ~]# mysql -...

フォーム要素属性の読み取り専用と無効の使用の比較

1) 適用範囲:読み取り専用:input[type="text"],input[...