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

推薦する

this.parentNode.parentNode (親ノードの親ノード) はどういう意味ですか?

親ノードの親ノード、例えば、このような段落がありますHTML:コードをコピーコードは次のとおりです。...

MySQL 5.7 でパスワードを変更するときに発生する ERROR 1054 (42S22) の解決方法

MySQL 5.7 を新しくインストールしました。ログインすると、パスワードが間違っているというメッ...

MySQLログシステムの使い方に関する簡単なチュートリアル

目次序文1. エラーログ2. バイナリログ1. バイナリログを有効にする2. バイナリログ形式3. ...

MYSQL開発パフォーマンス調査:バッチデータ挿入の最適化方法

1. どのような問題に直面しましたか?標準 SQL では、通常、次の SQL 挿入ステートメントを記...

CSS レスポンシブ レイアウト システムの例コード

レスポンシブ レイアウト システムは、今日の一般的な CSS フレームワークではすでに非常に一般的で...

WeChatアプレットキャンバスが署名機能を実装

WeChatアプレットプロジェクトでは、開発モジュールに手書き署名機能が含まれ、WeChatアプレッ...

MySQLストアドプロシージャにおけるカーソル(DECLARE)の原理と使い方の詳細な説明

この記事では、例を使用して、MySQL ストアド プロシージャにおけるカーソル (DECLARE) ...

デザイン: 意志の強いデザイナー

<br />長年の専門的なアートデザイン教育を通じて「美とは何か」を学びましたが、「美を...

Mybatis での動的 SQL ステートメント分析

この記事は主にMybatisでの動的SQL文の解析について紹介します。この記事のサンプルコードは非常...

キープアライブキャッシュをクリアする方法の詳細なグラフィック説明

目次オープニングシーンv-for を使用した直接レンダリングカスタムコンポーネントで直接レンダリング...

Centos7 から Centos8 へのアップグレードに関するチュートリアル (画像とテキスト付き)

正式な環境でアップグレードする場合は、データと重要な設定をバックアップしてください。アップグレードに...

Vue 実践における実用的な小さな魔法のまとめ

初回の読み込みを高速化できるルートの遅延読み込みをどうして忘れられるでしょうか?ルーティングの遅延読...

Nginx がサーバーの生存状態をパッシブにチェックする詳細な説明

導入定期的にヘルスチェックを送信して、アップストリーム グループ内の HTTP サーバーのヘルスを監...

CentOS 8 インストール図 (超詳細なチュートリアル)

CentOS 8 が正式にリリースされました! CentOS は Red Hat の再配布ポリシー...

MySql の知識ポイント: トランザクション、インデックス、ロックの原則、使用状況の分析

この記事では、トランザクション、インデックス、ロックなどの MySQL の知識ポイントの原理と使用法...