Reactの親コンポーネントと子コンポーネント間のデータ転送の詳細な説明

Reactの親コンポーネントと子コンポーネント間のデータ転送の詳細な説明

React フレームワーク コンポーネント間のデータ転送の知識ポイントを学習する前に、いくつかの使用原則を明確にする必要があります。

  1. React コンポーネント間の通信は一方向です。データは親から子へ、または子から親へレイヤーごとに渡す必要があります。
  2. 兄弟コンポーネントにデータを渡す場合は、まず共通の親にデータを渡し、次に渡す先のコンポーネントの場所にデータを渡す必要があります。
  3. 親子関係ではないコンポーネント間でデータを渡すために、このレイヤーごとのデータ転送方法を使用することは推奨されません。代わりに、グローバル状態維持機能モジュール (Redux) を使用することを選択します。

1. 親コンポーネントが子コンポーネントにデータを渡す

親コンポーネントは、親コンポーネント内で子コンポーネントを参照する際に、転送するデータのプロパティを子コンポーネントタグに設定することで子コンポーネントにデータを渡し、子コンポーネントは this.props を通じて渡されたデータを受け取ります。これにより、親コンポーネントから子コンポーネントへのデータ転送が実現されます。

1.1. 親コンポーネントコード

React をインポートします。{ コンポーネント } から 'react' をインポートします。
'./App.css' をインポートします。
'./child' から子をインポートします
クラスAppはComponentを拡張します{
    コンストラクタ(props){
        スーパー(小道具);
        this.state={
            メッセージ: '親クラスのメッセージ',
            名前:「ジョン」
            年齢:99
        }
    }
    コールバック=(メッセージ,名前,年齢)=>{
        // setState メソッド、msg の値を変更します。値は子から渡されます this.setState({msg});
        this.setState({name});
        this.setState({age});
    }
  与える() {
    戻る (
      <div className="アプリ">
        <p> メッセージ: {this.state.msg}</p>
        <子コールバック={this.callback} 年齢={this.state.age} 
name={this.state.name}></Child>
      </div>
    );
  }
}
デフォルトのアプリをエクスポートします。

コードの説明: 親コンポーネントが子コンポーネント (Child) を使用する場合、2 つのプロパティ (age と name) と 1 つのメソッド (現時点ではコールバックは考慮されていません) を子コンポーネントに転送します。

キーコード:

<子供の名前={this.state.name} 年齢={this.state.age}></子供>

1.2. サブコンポーネントコード

「react」からReactをインポートします。
クラスChildはReact.Componentを拡張します{
    コンストラクタ(props){
        スーパー(小道具);
        this.state={
            名前:「アンディ」
            年齢:31歳
            msg:"サブクラスからのメッセージ"
        }
    }
    変更=()=>{
        this.props.callback(this.state.msg、this.state.name、this.state.age);
    }
    与える(){
        戻る(
            <div>
                <div>{this.props.name}</div>
                <div>{this.props.age}</div>
                <button onClick={this.change}>クリック</button>
            </div>
        )
    }
}
デフォルトの子をエクスポートします。

コードの説明: 子コンポーネントでは、this.props がレンダリングで直接使用され、親コンポーネントによって送信されたデータを受け入れて直接使用します。子コンポーネントが this.setSate を使用して受信したデータを処理することは推奨されません。

キーコード:

<div>{this.props.name}</div>
<div>{this.props.age}</div>

2. サブコンポーネントは親コンポーネントにデータを転送する

React フレームワークでは、子コンポーネントから親コンポーネントへのデータ転送は、親コンポーネントから子コンポーネントへのデータ転送に依存します。実際には、親コンポーネントは自身のスコープの関数を子コンポーネントに転送し、子コンポーネントはその関数を呼び出して、送信するデータを関数パラメータの形式で親コンポーネントに転送します。

2.1. 親コンポーネントコード

上記のコード例では、関数は親コンポーネントで定義され、子コンポーネントに転送されます。

クラスAppはComponentを拡張します{
......
    コールバック=(メッセージ,名前,年齢)=>{
        // setState メソッド、msg の値を変更します。値は子から渡されます this.setState({msg});
        this.setState({name});
        this.setState({age});
    }
  与える() {
    戻る (
      <div className="アプリ">
        <子コールバック={this.callback}></子>
      </div>
    );
  }
}
デフォルトのアプリをエクスポートします。

親コンポーネントは、自身のスコープの関数を子コンポーネントに渡します。子コンポーネントがthis.propsを通じてこの関数を呼び出すと、パラメータを通じてグループ コンポーネントにデータが転送されます。
ここで、親コンポーネントには msg、name、age の 3 つのパラメーターがあります。子コンポーネントがデータを転送した後、親コンポーネントはthis.setStateを使用してデータを処理します。

2.2. サブコンポーネントコード

子コンポーネントは、this.props を使用して親コンポーネントから送信された関数を受け取り、パラメータ メソッドを通じてこの関数を呼び出して、親コンポーネントにデータを送信します。

クラスChildはReact.Componentを拡張します{
......
    変更=()=>{
        this.props.callback(this.state.msg、this.state.name、this.state.age);
    }
    与える(){
        戻る(
            <div>
                <button onClick={this.change}>クリック</button>
            </div>
        )
    }
}
デフォルトの子をエクスポートします。

子コンポーネントにメソッドchange()が作成され、クリック イベントonClickにバインドされます。change change()メソッドはthis.props.callback()関数 (親コンポーネントから送信された関数) を呼び出します。関数の実際のパラメーターは、子コンポーネントから親コンポーネントに送信されたデータです。

以上がReact親コンポーネントと子コンポーネント間のデータ転送の詳細な説明です。React親コンポーネントと子コンポーネント間のデータ転送の詳細については、123WORDPRESS.COMの他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • React Native が「NSArray<id<RCTBridgeModule>>型のパラメータを初期化できません」というエラーを報告する (解決方法)
  • Reactの基本のまとめ
  • Reactにおけるキーの役割の詳細な説明
  • React 入門レベルの詳細なメモ

<<:  Linux で誤って削除したメッセージ ファイルを復元する方法

>>:  MySQL ページング中にオフセットが大きすぎる場合の SQL 最適化の経験の共有

推薦する

VMware 15.5 バージョンのインストール Windows_Server_2008_R2 システム チュートリアル図

1. VMware 15.5から新しい仮想マシンを作成する1. VMware を開き、ホームページで...

IE8は優れたエクスペリエンスを提供します: アクティビティ

今日は IE8 ベータ 1 (以下、IE8 と略します) をチラ見しました。IE8 は素晴らしい体験...

CSS を使用して固定ナビゲーションと左右スライドを備えたスクロール バーを作成する方法

上に示すように、ナビゲーションは上部に固定されており、左右にスライドしてさらにオプションをクリックで...

iconfontアイコンライブラリをvueに導入するエレガントな実践記録

目次序文SVGを生成するSVGスプライトの紹介プロジェクトアイコンを取得するプロジェクトのセットアッ...

MySQL で URL タイムゾーンの罠を回避する方法

序文最近、MySQL 6.0.x 以降の jar を使用する場合、コード URL リンクで serv...

Vue.js プロジェクトの開始方法

目次1. Node.jsとVue 2. ローカル開発環境でフロントエンドのVueプロジェクトを実行す...

曇り空のアイコン効果を実現する純粋な CSS

効果効果は以下のとおりです​実装のアイデアbox-shadow プロパティを使用して、複数の灰色の円...

spring-boot と docker-java に基づいて Docker コンテナの動的な管理と監視を実装します [完全なソース コードのダウンロード付き]

Docker入門Docker はオープンソースのアプリケーション コンテナ エンジンです。従来の仮...

コピー&ペーストはパッケージングの敵です

OO、デザイン パターン、および多くのオブジェクト指向の原則について話す前に、まず 1 つのことを習...

WeChatアプレットを使用して天井効果を実現する方法の例

目次1. 実装2. 問題点3. より良い実装方法があるかどうか検討する要約する背景は日付のタイトルで...

フレックスマルチカラムレイアウトで発生する問題と解決策の詳細な説明

フレックス レイアウトは間違いなくシンプルで使いやすいです。レイアウトをよりシンプルかつ高速にします...

MySQL スロークエリログの設定と使用方法のチュートリアル

序文MySQL スロー クエリ ログは、日常業務でよく遭遇する機能です。MySQL スロー クエリ ...

入力スクリプトなしでタイプ拡張を使用する方法

序文JS の型付けが弱く、記述基準が緩く、開発ツールのサポートが弱いため、前任者のコードをメンテナン...

CocosCreatorでリストを作成する方法

CocosCreator バージョン: 2.3.4 Cocos には List コンポーネントがない...

docker と docker-compose による eureka の高可用性の実現の詳細な説明

最近、新しいプロジェクトでは springcloud と docker が使用されています。この 2...